Skip to content

Commit 8cb2e53

Browse files
authored
Remove terminal from json if terminal app has been removed (#914)
1 parent daa037d commit 8cb2e53

File tree

4 files changed

+98
-54
lines changed

4 files changed

+98
-54
lines changed

Files/DataModels/TerminalFileModel.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
using Newtonsoft.Json;
1+
using Files.Helpers;
2+
using Newtonsoft.Json;
3+
using System;
24
using System.Collections.Generic;
35
using System.Linq;
6+
using System.Threading.Tasks;
47

58
namespace Files.DataModels
69
{
@@ -23,5 +26,29 @@ public TerminalModel GetDefaultTerminal()
2326
}
2427
return Terminals.First();
2528
}
29+
30+
public void ResetToDefaultTerminal()
31+
{
32+
DefaultTerminalId = 1;
33+
}
34+
35+
public async Task<bool> AddTerminal(TerminalModel terminal, string packageName)
36+
{
37+
bool isChanged = false;
38+
bool isInstalled = await PackageHelper.IsAppInstalledAsync(packageName);
39+
//Ensure terminal is not already in List
40+
if (Terminals.FirstOrDefault(x => x.Path.Equals(terminal.Path, StringComparison.OrdinalIgnoreCase)) == null && isInstalled)
41+
{
42+
Terminals.Add(terminal);
43+
isChanged = true;
44+
}
45+
else if (!isInstalled)
46+
{
47+
Terminals.Remove(Terminals.FirstOrDefault(x => x.Path.Equals(terminal.Path, StringComparison.OrdinalIgnoreCase)));
48+
ResetToDefaultTerminal();
49+
isChanged = true;
50+
}
51+
return isChanged;
52+
}
2653
}
2754
}

Files/Files.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@
155155
<Compile Include="Helpers\DispatcherHelper.cs" />
156156
<Compile Include="Helpers\ItemsDataTemplateSelector.cs" />
157157
<Compile Include="Helpers\NaturalStringComparer.cs" />
158+
<Compile Include="Helpers\PackageHelper.cs" />
158159
<Compile Include="Helpers\StringExtensions.cs" />
159160
<Compile Include="Helpers\ThemeHelper.cs" />
160161
<Compile Include="Program.cs" />

Files/Helpers/PackageHelper.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Threading.Tasks;
4+
using Windows.System;
5+
6+
namespace Files.Helpers
7+
{
8+
public static class PackageHelper
9+
{
10+
private static readonly Uri dummyUri = new Uri("mailto:[email protected]");
11+
12+
/// <summary>
13+
/// Check if target <paramref name="packageName"/> is installed on this device.
14+
/// </summary>
15+
/// <param name="packageName">Package name in format: "949FFEAB.Email.cz_refxrrjvvv3cw"</param>
16+
/// <returns>True is app is installed on this device, false otherwise.</returns>
17+
public static async Task<bool> IsAppInstalledAsync(string packageName)
18+
{
19+
try
20+
{
21+
bool appInstalled;
22+
LaunchQuerySupportStatus result = await Launcher.QueryUriSupportAsync(dummyUri, LaunchQuerySupportType.Uri, packageName);
23+
switch (result)
24+
{
25+
case LaunchQuerySupportStatus.Available:
26+
case LaunchQuerySupportStatus.NotSupported:
27+
appInstalled = true;
28+
break;
29+
//case LaunchQuerySupportStatus.AppNotInstalled:
30+
//case LaunchQuerySupportStatus.AppUnavailable:
31+
//case LaunchQuerySupportStatus.Unknown:
32+
default:
33+
appInstalled = false;
34+
break;
35+
}
36+
37+
Debug.WriteLine($"App {packageName}, query status: {result}, installed: {appInstalled}");
38+
return appInstalled;
39+
}
40+
catch (Exception ex)
41+
{
42+
Debug.WriteLine($"Error checking if app {packageName} is installed. Error: {ex}");
43+
return false;
44+
}
45+
}
46+
}
47+
}

Files/View Models/SettingsViewModel.cs

Lines changed: 22 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414
using System.Linq;
1515
using System.Reflection;
1616
using System.Runtime.CompilerServices;
17-
using System.Threading.Tasks;
1817
using Windows.Foundation.Collections;
1918
using Windows.Storage;
20-
using Windows.System;
2119

2220
namespace Files.View_Models
2321
{
@@ -277,43 +275,6 @@ public TimeStyle DisplayedTimeStyle
277275
}
278276
}
279277

280-
private static readonly Uri dummyUri = new Uri("mailto:[email protected]");
281-
282-
/// <summary>
283-
/// Check if target <paramref name="packageName"/> is installed on this device.
284-
/// </summary>
285-
/// <param name="packageName">Package name in format: "949FFEAB.Email.cz_refxrrjvvv3cw"</param>
286-
/// <returns>True is app is installed on this device, false otherwise.</returns>
287-
public static async Task<bool> IsAppInstalledAsync(string packageName)
288-
{
289-
try
290-
{
291-
bool appInstalled;
292-
LaunchQuerySupportStatus result = await Launcher.QueryUriSupportAsync(dummyUri, LaunchQuerySupportType.Uri, packageName);
293-
switch (result)
294-
{
295-
case LaunchQuerySupportStatus.Available:
296-
case LaunchQuerySupportStatus.NotSupported:
297-
appInstalled = true;
298-
break;
299-
//case LaunchQuerySupportStatus.AppNotInstalled:
300-
//case LaunchQuerySupportStatus.AppUnavailable:
301-
//case LaunchQuerySupportStatus.Unknown:
302-
default:
303-
appInstalled = false;
304-
break;
305-
}
306-
307-
Debug.WriteLine($"App {packageName}, query status: {result}, installed: {appInstalled}");
308-
return appInstalled;
309-
}
310-
catch (Exception ex)
311-
{
312-
Debug.WriteLine($"Error checking if app {packageName} is installed. Error: {ex}");
313-
return false;
314-
}
315-
}
316-
317278
public TerminalFileModel TerminalsModel { get; set; }
318279

319280
public StorageFile TerminalsModelFile;
@@ -350,21 +311,29 @@ private async void LoadTerminalApps()
350311
TerminalsModel = JsonConvert.DeserializeObject<TerminalFileModel>(defaultContent);
351312
}
352313

353-
//Ensure Windows Terminal is not already in List
354-
if (TerminalsModel.Terminals.FirstOrDefault(x => x.Path.Equals("wt.exe", StringComparison.OrdinalIgnoreCase)) == null)
314+
var windowsTerminal = new TerminalModel()
355315
{
356-
if (await IsAppInstalledAsync("Microsoft.WindowsTerminal_8wekyb3d8bbwe"))
357-
{
358-
TerminalsModel.Terminals.Add(new TerminalModel()
359-
{
360-
Id = TerminalsModel.Terminals.Count + 1,
361-
Name = "Windows Terminal",
362-
Path = "wt.exe",
363-
Arguments = "-d {0}",
364-
Icon = ""
365-
});
366-
await FileIO.WriteTextAsync(TerminalsModelFile, JsonConvert.SerializeObject(TerminalsModel, Formatting.Indented));
367-
}
316+
Id = TerminalsModel.Terminals.Count + 1,
317+
Name = "Windows Terminal",
318+
Path = "wt.exe",
319+
Arguments = "-d {0}",
320+
Icon = ""
321+
};
322+
323+
var fluentTerminal = new TerminalModel()
324+
{
325+
Id = TerminalsModel.Terminals.Count + 1,
326+
Name = "Fluent Terminal",
327+
Path = "flute.exe",
328+
Arguments = "new \"{0}\"",
329+
Icon = ""
330+
};
331+
332+
bool isWindowsTerminalAddedOrRemoved = await TerminalsModel.AddTerminal(windowsTerminal, "Microsoft.WindowsTerminal_8wekyb3d8bbwe");
333+
bool isFluentTerminalAddedOrRemoved = await TerminalsModel.AddTerminal(fluentTerminal, "53621FSApps.FluentTerminal_87x1pks76srcp");
334+
if (isWindowsTerminalAddedOrRemoved || isFluentTerminalAddedOrRemoved)
335+
{
336+
await FileIO.WriteTextAsync(TerminalsModelFile, JsonConvert.SerializeObject(TerminalsModel, Formatting.Indented));
368337
}
369338
}
370339

0 commit comments

Comments
 (0)