From 8fb9f418527731e4308dfa3c18591b930003caa8 Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Thu, 3 Sep 2020 12:58:00 -0400 Subject: [PATCH] generate mime/packages/universal-editor.xml for linux, .reg support for Windows coming soon --- .../Program.cs | 131 +++++++++++++----- 1 file changed, 99 insertions(+), 32 deletions(-) diff --git a/Applications/UniversalEditor.ConsoleApplication/Program.cs b/Applications/UniversalEditor.ConsoleApplication/Program.cs index 084e5bb5..d2b734bf 100644 --- a/Applications/UniversalEditor.ConsoleApplication/Program.cs +++ b/Applications/UniversalEditor.ConsoleApplication/Program.cs @@ -30,44 +30,44 @@ namespace UniversalEditor.ConsoleApplication { if (args.Length > 0) { - if (args[0] == "--update-associations") + if (args[0] == "--generate-associations") { - StringBuilder sb = new StringBuilder(); - sb.AppendLine(""); - sb.AppendLine(""); - DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(); - - Association[] assocs = Association.GetAllAssociations(); - for (int i = 0; i < assocs.Length; i++) + string assocs = null; + if (args.Length > 1) { - for (int j = 0; j < assocs[i].Filters.Count; j++) + if (args[1] == "--reg") { - string mimetype = String.Format("application/x-universaleditor-a{0}f{1}", i, j); - /* - if (assocs[i].Filters[j].MimeType != null) - { - mimetype = assocs[i].Filters[j].MimeType; - } - */ - sb.AppendLine(String.Format("\t", mimetype)); - sb.AppendLine(String.Format("\t\t{0}", assocs[i].Filters[j].Title)); - - Console.Write("registering '{0}' extensions... ", assocs[i].Filters[j].Title); - for (int k = 0; k < assocs[i].Filters[j].FileNameFilters.Count; k++) - { - sb.AppendLine(String.Format("\t\t", assocs[i].Filters[j].FileNameFilters[k])); - - Console.Write(assocs[i].Filters[j].FileNameFilters[k]); - if (k < assocs[i].Filters[j].FileNameFilters.Count - 1) - Console.Write(' '); - } - Console.WriteLine(); - sb.AppendLine("\t"); + assocs = GenerateAssociationsREG(); } } - sb.AppendLine(""); - System.IO.File.WriteAllText("universal-editor.xml", sb.ToString()); + if (assocs == null) + assocs = GenerateAssociations(); + + Console.WriteLine(assocs); + } + else if (args[0] == "--update-associations") + { + if (System.Environment.OSVersion.Platform == PlatformID.Unix) + { + string filename = "/usr/share/mime/packages/universal-editor.xml"; + string assocs = GenerateAssociations(); + try + { + System.IO.File.WriteAllText(filename, assocs); + System.Diagnostics.Process.Start("update-mime-database", "/usr/share/mime"); + System.Environment.Exit(0); + } + catch (UnauthorizedAccessException ex) + { + Console.WriteLine("ue: {0}: Permission denied", filename); + System.Environment.Exit(1); + } + } + else if (System.Environment.OSVersion.Platform == PlatformID.Win32NT) + { + + } } else if (args[0] == "--list-associations") { @@ -165,5 +165,72 @@ namespace UniversalEditor.ConsoleApplication byte[] output = ma.ToArray(); stout.Write(output, 0, output.Length); } + + private static string GenerateAssociations() + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine(""); + sb.AppendLine(""); + DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(); + + Association[] assocs = Association.GetAllAssociations(); + for (int i = 0; i < assocs.Length; i++) + { + for (int j = 0; j < assocs[i].Filters.Count; j++) + { + string mimetype = String.Format("application/x-universaleditor-a{0}f{1}", i, j); + if (assocs[i].Filters[j].ContentType != null) + { + mimetype = assocs[i].Filters[j].ContentType; + } + sb.AppendLine(String.Format("\t", mimetype)); + sb.AppendLine(String.Format("\t\t{0}", assocs[i].Filters[j].Title)); + + // Console.Write("registering '{0}' extensions... ", assocs[i].Filters[j].Title); + for (int k = 0; k < assocs[i].Filters[j].FileNameFilters.Count; k++) + { + sb.AppendLine(String.Format("\t\t", assocs[i].Filters[j].FileNameFilters[k])); + } + sb.AppendLine("\t"); + } + } + sb.Append(""); + return sb.ToString(); + } + private static string GenerateAssociationsREG() + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("Windows Registry Editor Version 5.00"); + + DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(); + + Association[] assocs = Association.GetAllAssociations(); + for (int i = 0; i < assocs.Length; i++) + { + for (int j = 0; j < assocs[i].Filters.Count; j++) + { + for (int k = 0; k < assocs[i].Filters[j].FileNameFilters.Count; k++) + { + string ext = assocs[i].Filters[j].FileNameFilters[k]; + if (ext.StartsWith("*.")) + { + ext = ext.Substring(1); + } + + sb.AppendLine(String.Format("[HKEY_CLASSES_ROOT\\{0}{1}]", "UniversalEditor", ext)); + + sb.AppendLine(String.Format("[HKEY_CLASSES_ROOT\\{0}{1}\\DefaultIcon]", "UniversalEditor", ext)); + sb.AppendLine("@=\"universal-editor.ico\""); + + sb.AppendLine(String.Format("[HKEY_CLASSES_ROOT\\{0}{1}\\Shell\\Open\\command]", "UniversalEditor", ext)); + sb.AppendLine("@=UniversalEditor.exe \"%1\""); + + sb.AppendLine(String.Format("[HKEY_CLASSES_ROOT\\{0}]", ext)); + sb.AppendLine(String.Format("@=\"{0}{1}\"", "UniversalEditor", ext)); + } + } + } + return sb.ToString(); + } } }