36 var candidates =
new List<(string Path, string? Version)>();
37 var overridden = Environment.GetEnvironmentVariable(
"ANKI_EXECUTABLE");
38 if (!
string.IsNullOrWhiteSpace(overridden))
40 candidates.Add((overridden, Environment.GetEnvironmentVariable(
"ANKI_VERSION")));
43 if (OperatingSystem.IsWindows())
45 AddWindowsRegistryCandidates(candidates);
46 candidates.Add((Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"Programs",
"Anki",
"anki.exe"),
null));
47 candidates.Add((Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
"Anki",
"anki.exe"),
null));
49 else if (OperatingSystem.IsMacOS())
51 candidates.Add((
"/Applications/Anki.app/Contents/MacOS/anki",
null));
55 candidates.Add((
"/usr/bin/anki",
null));
56 candidates.Add((
"/usr/local/bin/anki",
null));
59 var candidate = candidates.FirstOrDefault(item => File.Exists(item.Path));
60 if (candidate ==
default)
65 var text = candidate.Version;
66 if (
string.IsNullOrWhiteSpace(text) && OperatingSystem.IsWindows())
68 text = System.Diagnostics.FileVersionInfo.GetVersionInfo(candidate.Path).ProductVersion;
71 text =
string.IsNullOrWhiteSpace(text) ?
"0.0" : text.Split([
' ',
'+'], StringSplitOptions.RemoveEmptyEntries)[0];
72 _ = Version.TryParse(text, out var version);
73 var data = GetDataDirectory();
74 var profileDirectories = data is
null || !Directory.Exists(data) ? [] : Directory.GetDirectories(data);
76 Path.GetFullPath(candidate.Path),
77 Path.GetDirectoryName(Path.GetFullPath(candidate.Path))!,
78 version ??
new Version(0, 0),
81 profileDirectories.Length > 0,
82 profileDirectories.Any(directory => File.Exists(Path.Combine(directory,
"collection.anki2")) || File.Exists(Path.Combine(directory,
"collection.anki21"))),
83 profileDirectories.Any(directory => Directory.Exists(Path.Combine(directory,
"collection.media"))),
84 data is not
null && Directory.Exists(Path.Combine(data,
"addons21")));
95 if (OperatingSystem.IsWindows())
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Anki2");
96 if (OperatingSystem.IsMacOS())
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),
"Library",
"Application Support",
"Anki2");