-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
149 lines (139 loc) · 10.6 KB
/
MainWindow.xaml
File metadata and controls
149 lines (139 loc) · 10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="CodexSessionSync.WinUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CodexSessionSync.WinUI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="CodexSessionSync.WinUI">
<Window.SystemBackdrop>
<DesktopAcrylicBackdrop />
</Window.SystemBackdrop>
<Grid x:Name="RootGrid" Background="{ThemeResource AppBackgroundBrush}">
<ScrollViewer>
<Grid Margin="24" RowSpacing="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- Header -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="Codex 会话同步工具" FontSize="26" FontWeight="SemiBold" Margin="0,0,0,4"/>
<TextBlock Text="默认预览,不会写入;勾选确认后点击执行写入才会修改文件和 SQLite。" Style="{ThemeResource BodyTextBlockStyle}" Opacity="0.8" TextWrapping="Wrap"/>
</StackPanel>
<Button Grid.Column="1" Margin="0,0,12,0" VerticalAlignment="Center" x:Name="ThemeToggleBtn" Click="OnThemeToggleClick" Background="Transparent" BorderThickness="0" ToolTipService.ToolTip="切换到浅色模式">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" x:Name="ThemeIcon"/>
</Button>
<Border Grid.Column="2" Background="{ThemeResource AppInsetBackgroundBrush}" BorderBrush="{ThemeResource SurfaceStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="4" Padding="12,8" MinWidth="140" VerticalAlignment="Center">
<TextBlock x:Name="StatusLabel" Text="准备就绪" Style="{ThemeResource BodyStrongTextBlockStyle}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Grid>
<!-- Config -->
<Border Grid.Row="1" Background="{ThemeResource AppCardBackgroundBrush}" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="18">
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="Codex Home" Style="{ThemeResource BodyStrongTextBlockStyle}" Margin="0,0,0,6"/>
<TextBox x:Name="CodexHomeBox" MinHeight="36" />
<TextBlock Text="默认读取 CODEX_HOME 或当前用户的 .codex。" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.7" Margin="0,4,0,0"/>
</StackPanel>
<StackPanel Grid.Column="1">
<TextBlock Text="备份目录" Style="{ThemeResource BodyStrongTextBlockStyle}" Margin="0,0,0,6"/>
<TextBox x:Name="BackupDirBox" MinHeight="36" />
<TextBlock Text="执行写入时建议填写,例如桌面上的 codex-backup。" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.7" Margin="0,4,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- Mode -->
<Border Grid.Row="2" Background="{ThemeResource AppCardBackgroundBrush}" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="18">
<StackPanel Spacing="16">
<StackPanel>
<TextBlock Text="同步模式" Style="{ThemeResource BodyStrongTextBlockStyle}" Margin="0,0,0,10"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Spacing="8">
<Border Background="{ThemeResource AppInsetBackgroundBrush}" BorderBrush="{ThemeResource SurfaceStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="12" MinWidth="220" Tapped="OnModeCardClick">
<RadioButton x:Name="ModeMutual" GroupName="Mode" IsChecked="True" VerticalAlignment="Top">
<StackPanel>
<TextBlock Text="全供应商互同步" Style="{ThemeResource BodyStrongTextBlockStyle}" />
<TextBlock Text="配置中的每个 provider 最终看到同一批会话。" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.7" TextWrapping="Wrap" MaxWidth="220"/>
</StackPanel>
</RadioButton>
</Border>
<Border Background="{ThemeResource AppInsetBackgroundBrush}" BorderBrush="{ThemeResource SurfaceStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="12" MinWidth="220" Tapped="OnModeCardClick">
<RadioButton x:Name="ModeOpenAi" GroupName="Mode" VerticalAlignment="Top">
<StackPanel>
<TextBlock Text="OpenAI 同步到全部" Style="{ThemeResource BodyStrongTextBlockStyle}" />
<TextBlock Text="以 source provider 为源,给其它 provider 创建镜像。" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.7" TextWrapping="Wrap" MaxWidth="220"/>
</StackPanel>
</RadioButton>
</Border>
<Border Background="{ThemeResource AppInsetBackgroundBrush}" BorderBrush="{ThemeResource SurfaceStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="12" MinWidth="220" Tapped="OnModeCardClick">
<RadioButton x:Name="ModeMigrate" GroupName="Mode" VerticalAlignment="Top">
<StackPanel>
<TextBlock Text="单目标迁移" Style="{ThemeResource BodyStrongTextBlockStyle}" />
<TextBlock Text="把非保留 provider 的历史会话迁移到目标 provider。" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.7" TextWrapping="Wrap" MaxWidth="220"/>
</StackPanel>
</RadioButton>
</Border>
</StackPanel>
</StackPanel>
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="源 provider" Style="{ThemeResource BodyStrongTextBlockStyle}" Margin="0,0,0,6"/>
<TextBox x:Name="SourceProviderBox" Text="openai" MinHeight="36" />
</StackPanel>
<StackPanel Grid.Column="1">
<TextBlock Text="目标 provider" Style="{ThemeResource BodyStrongTextBlockStyle}" Margin="0,0,0,6"/>
<TextBox x:Name="TargetProviderBox" Text="openai" MinHeight="36" />
</StackPanel>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="8">
<Button x:Name="PreviewBtn" Content="预览" Width="90" Height="36" Style="{ThemeResource AccentButtonStyle}" Click="OnPreviewClick"/>
<Button x:Name="ApplyBtn" Content="执行写入" Width="100" Height="36" Click="OnApplyClick">
<Button.Background>
<SolidColorBrush Color="#C42B1C" />
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="White" />
</Button.Foreground>
</Button>
<Button Content="恢复默认路径" Height="36" Padding="12,0" Click="OnResetDefaults"/>
<CheckBox x:Name="ConfirmCheck" VerticalAlignment="Center" Margin="8,0,0,0">
<TextBlock Text="我已备份或确认可以写入" Style="{ThemeResource BodyTextBlockStyle}" Opacity="0.8" />
</CheckBox>
</StackPanel>
</StackPanel>
</Border>
<!-- Output -->
<Border Grid.Row="3" Background="{ThemeResource AppOutputBackgroundBrush}" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="{StaticResource ControlCornerRadius}" Padding="16" Margin="0" MinHeight="150" VerticalAlignment="Stretch">
<TextBox x:Name="OutputBox"
Background="Transparent"
Foreground="{ThemeResource AppOutputForegroundBrush}"
FontFamily="Consolas, 'Cascadia Mono', monospace"
FontSize="13"
BorderThickness="0"
IsReadOnly="True"
TextWrapping="Wrap"
AcceptsReturn="True"
Text="等待运行。"/>
</Border>
</Grid>
</ScrollViewer>
</Grid>
</Window>