|
1 | 1 | using Files.DataModels;
|
2 | 2 | using Files.Enums;
|
| 3 | +using Files.Extensions; |
3 | 4 | using Files.Filesystem;
|
4 | 5 | using Files.Helpers;
|
5 | 6 | using Newtonsoft.Json;
|
6 | 7 | using System;
|
7 |
| -using System.Diagnostics; |
| 8 | +using System.Collections.Generic; |
8 | 9 | using System.IO;
|
| 10 | +using System.Linq; |
9 | 11 | using System.Threading.Tasks;
|
10 | 12 | using Windows.ApplicationModel.Core;
|
11 | 13 | using Windows.Storage;
|
@@ -138,64 +140,64 @@ private async Task<TerminalFileModel> GetDefaultTerminalFileModel()
|
138 | 140 | {
|
139 | 141 | StorageFile defaultFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(defaultTerminalPath));
|
140 | 142 | var defaultContent = await FileIO.ReadTextAsync(defaultFile);
|
141 |
| - return JsonConvert.DeserializeObject<TerminalFileModel>(defaultContent); |
| 143 | + var model = JsonConvert.DeserializeObject<TerminalFileModel>(defaultContent); |
| 144 | + await GetInstalledTerminalsAsync(model); |
| 145 | + model.ResetToDefaultTerminal(); |
| 146 | + return model; |
142 | 147 | }
|
143 | 148 | catch
|
144 | 149 | {
|
145 | 150 | var model = new TerminalFileModel();
|
146 |
| - model.Terminals.Add(new Terminal() |
147 |
| - { |
148 |
| - Name = "CMD", |
149 |
| - Path = "cmd.exe", |
150 |
| - Arguments = "", |
151 |
| - Icon = "" |
152 |
| - }); |
| 151 | + await GetInstalledTerminalsAsync(model); |
153 | 152 | model.ResetToDefaultTerminal();
|
154 | 153 | return model;
|
155 | 154 | }
|
156 | 155 | }
|
157 | 156 |
|
158 |
| - public async Task GetInstalledTerminalsAsync() |
| 157 | + private async Task GetInstalledTerminalsAsync() |
| 158 | + { |
| 159 | + await GetInstalledTerminalsAsync(Model); |
| 160 | + SaveModel(); |
| 161 | + } |
| 162 | + |
| 163 | + private async Task GetInstalledTerminalsAsync(TerminalFileModel model) |
159 | 164 | {
|
160 |
| - var windowsTerminal = new Terminal() |
| 165 | + var terminalDefs = new Dictionary<Terminal, bool>(); |
| 166 | + |
| 167 | + terminalDefs.Add(new Terminal() |
161 | 168 | {
|
162 | 169 | Name = "Windows Terminal",
|
163 | 170 | Path = "wt.exe",
|
164 | 171 | Arguments = "-d .",
|
165 | 172 | Icon = ""
|
166 |
| - }; |
| 173 | + }, await IsWindowsTerminalBuildInstalled()); |
167 | 174 |
|
168 |
| - var fluentTerminal = new Terminal() |
| 175 | + terminalDefs.Add(new Terminal() |
169 | 176 | {
|
170 | 177 | Name = "Fluent Terminal",
|
171 | 178 | Path = "flute.exe",
|
172 | 179 | Arguments = "",
|
173 | 180 | Icon = ""
|
174 |
| - }; |
| 181 | + }, await PackageHelper.IsAppInstalledAsync("53621FSApps.FluentTerminal_87x1pks76srcp")); |
175 | 182 |
|
176 |
| - bool isWindowsTerminalInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminal_8wekyb3d8bbwe"); |
177 |
| - bool isWindowsTerminalPreviewInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe"); |
178 |
| - bool isFluentTerminalInstalled = await PackageHelper.IsAppInstalledAsync("53621FSApps.FluentTerminal_87x1pks76srcp"); |
179 |
| - |
180 |
| - if (isWindowsTerminalInstalled || isWindowsTerminalPreviewInstalled) |
181 |
| - { |
182 |
| - Model.AddTerminal(windowsTerminal); |
183 |
| - } |
184 |
| - else |
| 183 | + terminalDefs.Add(new Terminal() |
185 | 184 | {
|
186 |
| - Model.RemoveTerminal(windowsTerminal); |
187 |
| - } |
| 185 | + Name = "CMD", |
| 186 | + Path = "cmd.exe", |
| 187 | + Arguments = "", |
| 188 | + Icon = "" |
| 189 | + }, true); // CMD will always be present (for now at least) |
188 | 190 |
|
189 |
| - if (isFluentTerminalInstalled) |
190 |
| - { |
191 |
| - Model.AddTerminal(fluentTerminal); |
192 |
| - } |
193 |
| - else |
194 |
| - { |
195 |
| - Model.RemoveTerminal(fluentTerminal); |
196 |
| - } |
| 191 | + terminalDefs.Where(x => x.Value).ForEach(x => model.AddTerminal(x.Key)); |
| 192 | + terminalDefs.Where(x => !x.Value).ForEach(x => model.RemoveTerminal(x.Key)); |
| 193 | + } |
197 | 194 |
|
198 |
| - SaveModel(); |
| 195 | + public async static Task<bool> IsWindowsTerminalBuildInstalled() |
| 196 | + { |
| 197 | + bool isWindowsTerminalInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminal_8wekyb3d8bbwe"); |
| 198 | + bool isWindowsTerminalPreviewInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe"); |
| 199 | + |
| 200 | + return isWindowsTerminalPreviewInstalled || isWindowsTerminalInstalled; |
199 | 201 | }
|
200 | 202 |
|
201 | 203 | public void SaveModel()
|
|
0 commit comments