コード例 #1
0
ファイル: LauncherExtension.cs プロジェクト: unoplatform/uno
        private bool CheckMimeTypeAssociations(Uri uri)
        {
            var list     = new MimeAppsList();
            var mimeType = $"x-scheme-handler/{uri.Scheme}";

            return(list.Supports(mimeType));
        }
コード例 #2
0
        public bool Check()
        {
            switch (registerType)
            {
            case RegisterType.CurrentUser:
                var checkCommand = new Command("xdg-settings", $"get default-url-scheme-handler {scheme}");
                checkCommand.Start();
                string response = checkCommand.Output.Trim();

                return(response == $"{scheme}.desktop");

            case RegisterType.LocalMachine:
                var appsList = new MimeAppsList(RegisterType.LocalMachine);
                return(appsList.GetURISchemeHandlers(scheme).FirstOrDefault() == $"{scheme}.desktop");
            }
            return(false);
        }
コード例 #3
0
        public bool CheckAny()
        {
            switch (registerType)
            {
            case RegisterType.CurrentUser:
                var checkCommand = new Command("xdg-settings", $"get default-url-scheme-handler {scheme}");
                checkCommand.Start();
                string response = checkCommand.Output.Trim();

                return(!string.IsNullOrEmpty(response));

            case RegisterType.LocalMachine:
                var appsList = new MimeAppsList(RegisterType.LocalMachine);
                return(appsList.GetURISchemeHandlers(scheme).Count != 0);
            }
            return(false);
        }
コード例 #4
0
        public void Delete()
        {
            string tmpFolder = Path.GetTempFileName();

            File.Delete(tmpFolder);
            Directory.CreateDirectory(tmpFolder);
            try
            {
                string xmlFileName = Path.Combine(tmpFolder, $"{scheme}.xml");
                using (var tempXMLFile = File.CreateText(xmlFileName))
                {
                    GenerateXMLFile(tempXMLFile);
                }
                switch (registerType)
                {
                case RegisterType.CurrentUser:
                {
                    var uninstallCommand         = new Command("xdg-mime", $"uninstall {xmlFileName} --novendor").Start().ThrowOnError();
                    var deleteDesktopFileCommand = new Command("rm", $"-f {Path.Combine(UserDir, $"{scheme}.desktop")}").Start().ThrowOnError();
                }
                break;

                case RegisterType.LocalMachine:
                {
                    var uninstallCommand         = new SudoCommand("xdg-mime", $"uninstall {xmlFileName} --mode system --novendor").Start().ThrowOnError();
                    var deleteDesktopFileCommand = new SudoCommand("rm", $"-f {Path.Combine(DefaultDir, $"{scheme}.desktop")}").Start().ThrowOnError();
                    var mimeapps = new MimeAppsList(RegisterType.LocalMachine);
                    var list     = mimeapps.GetURISchemeHandlers(scheme);
                    list.RemoveAll((s) => s == $"{scheme}.desktop");
                    mimeapps.Save();
                }
                break;
                }
            }
            finally
            {
                Directory.Delete(tmpFolder, true);
            }
        }
コード例 #5
0
        public void Set()
        {
            string tmpFolder = Path.GetTempFileName();

            File.Delete(tmpFolder);
            Directory.CreateDirectory(tmpFolder);
            try
            {
                string xmlFileName     = Path.Combine(tmpFolder, $"{scheme}.xml");
                string desktopFileName = Path.Combine(tmpFolder, $"{scheme}.desktop");
                using (var tempXMLFile = File.CreateText(xmlFileName))
                {
                    GenerateXMLFile(tempXMLFile);
                }

                switch (registerType)
                {
                case RegisterType.CurrentUser:
                {
                    var installCommand = new Command("xdg-mime", $"install {xmlFileName} --novendor").Start().ThrowOnError();
                }
                break;

                case RegisterType.LocalMachine:
                {
                    var installCommand = new SudoCommand("xdg-mime", $"install {xmlFileName} --mode system --novendor").Start().ThrowOnError();
                }
                break;
                }

                using (var tempDesktopFile = File.CreateText(desktopFileName))
                {
                    //				[Desktop Entry]
                    //				Name=LMAO
                    //				Exec=/home/trung/lmao %u
                    //				Type=Application
                    //				NoDisplay=true
                    //				Categories=Utility;
                    //				MimeType=x-scheme-handler/lmao;
                    tempDesktopFile.WriteLine("[Desktop Entry]");
                    tempDesktopFile.WriteLine($"Name={name}");
                    tempDesktopFile.WriteLine($"Exec={exec}");
                    tempDesktopFile.WriteLine($"Type=Application");
                    tempDesktopFile.WriteLine("NoDisplay=true");
                    tempDesktopFile.WriteLine("Categories=Utility");
                    tempDesktopFile.WriteLine($"MimeType=x-scheme-handler/{scheme}");
                }

                switch (registerType)
                {
                case RegisterType.CurrentUser:
                {
                    var desktopFileCommand = new Command("desktop-file-install", $"{desktopFileName} --dir={UserDir}").Start().ThrowOnError();
                    var setDefaultCommand  = new Command("xdg-settings", $"set default-url-scheme-handler {scheme} {scheme}.desktop")
                                             .MapReturnValue(2, "runPath does not exist.")
                                             .Start()
                                             .ThrowOnError();
                }
                break;

                case RegisterType.LocalMachine:
                {
                    Console.WriteLine("Pause.");
                    Console.ReadLine();
                    var desktopFileCommand = new SudoCommand("desktop-file-install", $"{desktopFileName}").Start().ThrowOnError();
                    var mimeapps           = new MimeAppsList(RegisterType.LocalMachine);
                    var list = mimeapps.GetURISchemeHandlers(scheme);
                    list.Insert(0, $"{scheme}.desktop");
                    mimeapps.Save();
                }
                break;
                }
            }
            finally
            {
                Directory.Delete(tmpFolder, true);
            }
        }