/
EmuleApplication.cs
57 lines (45 loc) · 2.3 KB
/
EmuleApplication.cs
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
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using IPFilter.Formats;
using IPFilter.Models;
using Microsoft.Win32;
namespace IPFilter.Apps
{
class EmuleApplication : IApplication
{
protected virtual string RegistryKeyName => @"Software\eMule";
protected virtual string DefaultDisplayName => "eMule";
protected virtual string FolderName => "eMule";
public Task<ApplicationDetectionResult> DetectAsync()
{
using (var key = Registry.CurrentUser.OpenSubKey(RegistryKeyName, false))
{
if (key == null) return Task.FromResult(ApplicationDetectionResult.NotFound());
var installLocation = (string)key.GetValue("Install Path");
if (string.IsNullOrWhiteSpace(installLocation)) return Task.FromResult(ApplicationDetectionResult.NotFound());
var result = ApplicationDetectionResult.Create(this, DefaultDisplayName, installLocation);
var exe = new FileInfo(Path.Combine(installLocation, "emule.exe"));
if (!exe.Exists) result.IsPresent = false;
var version = FileVersionInfo.GetVersionInfo(exe.FullName);
result.Description = version.ProductName;
result.Version = version.FileVersion;
return Task.FromResult(result);
}
}
public async Task<FilterUpdateResult> UpdateFilterAsync(FilterDownloadResult filter, CancellationToken cancellationToken, IProgress<ProgressModel> progress)
{
var roamingPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData, Environment.SpecialFolderOption.Create);
var destinationPath = Path.Combine(roamingPath, FolderName, "config", "ipfilter.dat");
Trace.TraceInformation("Writing filter to " + destinationPath);
using (var destination = File.Open(destinationPath, FileMode.Create, FileAccess.Write, FileShare.None))
using(var writer = new EmuleWriter(destination))
{
await writer.Write(filter.Entries, progress);
}
return new FilterUpdateResult { FilterTimestamp = filter.FilterTimestamp };
}
}
}