Example #1
0
        public AutoUpdateImpl(string windowsManifestUrl, string macManifestUrl, string packageUrl, string serviceName)
        {
            _version    = Assembly.GetEntryAssembly().GetName().Version.ToString();
            _packageUrl = packageUrl;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                _manifestUrl = windowsManifestUrl;

                OsCommand startOsCommand = new OsCommand();
                if (!serviceName.Equals(""))
                {
                    startOsCommand.FileName    = "cmd";
                    startOsCommand.Arguments   = $"/c sc start {serviceName}";
                    startOsCommand.WaitForExit = true;
                }
                else
                {
                    startOsCommand.FileName    = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
                    startOsCommand.Arguments   = "";
                    startOsCommand.WaitForExit = false;
                }
                _startCommand = startOsCommand;

                OsCommand stopOsCommand = new OsCommand();
                if (!serviceName.Equals(""))
                {
                    stopOsCommand.FileName    = "cmd";
                    stopOsCommand.Arguments   = $"/c sc stop {serviceName}";
                    stopOsCommand.WaitForExit = true;
                }
                else
                {
                    stopOsCommand.FileName    = "cmd";
                    stopOsCommand.Arguments   = $"/c taskkill /PID {System.Diagnostics.Process.GetCurrentProcess().Id.ToString()}";
                    stopOsCommand.WaitForExit = true;
                }
                _stopCommand = stopOsCommand;
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                _manifestUrl = macManifestUrl;

                OsCommand startOsCommand = new OsCommand();
                startOsCommand.FileName    = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
                startOsCommand.Arguments   = "";
                startOsCommand.WaitForExit = false;
                _startCommand = startOsCommand;

                OsCommand stopOsCommand = new OsCommand();
                stopOsCommand.FileName    = "kill"; //killall
                stopOsCommand.Arguments   = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
                stopOsCommand.WaitForExit = true;
                _stopCommand = stopOsCommand;
            }
        }
Example #2
0
        private static void Osc(AnsiParser sut, OsCommand command, params string[] args)
        {
            var arr = new ReadOnlyMemory <byte> [args.Length];

            for (var i = 0; i < args.Length; i++)
            {
                arr[i] = Encoding.UTF8.GetBytes(args[i]);
            }
            sut.OnOsCommand(command, arr.AsSpan());
        }
Example #3
0
        internal static void AnsiParser_OsCommand_ResetColor_Special(OsCommand command, NamedColor expectedIndex)
        {
            var dispatched = 0;
            var events     = new AnsiParserEvents
            {
                ResetColor = (index) =>
                {
                    ++dispatched;
                    Assert.Equal(expectedIndex, index);
                }
            };

            var sut = new AnsiParser(events: events);

            Osc(sut, command);
            Assert.Equal(1, dispatched);
        }
Example #4
0
        internal static void AnsiParser_OsCommand_SetColor(
            int expectedCount, NamedColor expectedIndex, int expectedR, int expectedG, int expectedB,
            OsCommand command, params string[] param
            )
        {
            var dispatched = 0;
            var events     = new AnsiParserEvents
            {
                SetColor = (NamedColor index, in Color color) =>
                {
                    dispatched++;
                    Assert.Equal(expectedIndex, index);
                    Assert.Equal(Color.FromArgb(expectedR, expectedG, expectedB), color);
                }
            };

            var sut = new AnsiParser(events: events);

            Osc(sut, command, param);
            Assert.Equal(expectedCount, dispatched);
        }
Example #5
0
        public void OnOsCommand(OsCommand command, ReadOnlySpan <ReadOnlyMemory <byte> > parameters, IgnoredData ignored = default)
        {
            Color color;
            ReadOnlySpan <char> characters;

            switch (command)
            {
            case OsCommand.SetWindowIconAndTitle:
            case OsCommand.SetWindowTitle:
                // Set window title.
                if (parameters.Length > 0 &&
                    _utf8(parameters[0].Span, out characters))
                {
                    _events.SetTitle?.Invoke(characters);
                }
                break;

            case OsCommand.SetWindowIcon: break;

            case OsCommand.SetColor:
                // Set color index.
                if (parameters.Length % 2 != 0)
                {
                    break;
                }
                for (var i = 0; i < parameters.Length; i += 2)
                {
                    if (TryParseByte(parameters[i].Span, out var index) &&
                        TryParseColor(parameters[i + 1].Span, out color))
                    {
                        _events.SetColor?.Invoke((NamedColor)index, color);
                    }
                }
                break;

            case OsCommand.SetForegroundColor:
                if (parameters.Length > 0 &&
                    TryParseColor(parameters[0].Span, out color))
                {
                    _events.SetColor?.Invoke(NamedColor.Foreground, color);
                }
                break;

            case OsCommand.SetBackgroundColor:
                if (parameters.Length > 0 &&
                    TryParseColor(parameters[0].Span, out color))
                {
                    _events.SetColor?.Invoke(NamedColor.Background, color);
                }
                break;

            case OsCommand.SetCursorColor:
                if (parameters.Length > 0 &&
                    TryParseColor(parameters[0].Span, out color))
                {
                    _events.SetColor?.Invoke(NamedColor.Cursor, color);
                }
                break;

            case OsCommand.SetCursorStyle:
                if (parameters.Length > 0 && parameters[0].Length > _cursorShape.Length &&
                    parameters[0].Span.Slice(0, _cursorShape.Length).SequenceEqual(_cursorShape))
                {
                    switch ((CursorStyle)(parameters[0].Span[12] - (byte)'0'))
                    {
                    case CursorStyle.Beam:
                        _events.SetCursor?.Invoke(CursorStyle.Beam);
                        break;

                    case CursorStyle.Block:
                        _events.SetCursor?.Invoke(CursorStyle.Block);
                        break;

                    case CursorStyle.Underline:
                        _events.SetCursor?.Invoke(CursorStyle.Underline);
                        break;
                    }
                }
                break;

            case OsCommand.SetClipboard:
                if (parameters.Length > 1 &&
                    (parameters[1].Length == 0 || parameters[1].Span[0] != '?') &&
                    TryParseBase64(parameters[1].Span, out ReadOnlySpan <byte> base64) &&
                    _utf8(base64, out characters))
                {
                    _events.SetClipboard?.Invoke(characters);
                }
                break;

            case OsCommand.ResetColor:
                if (parameters.Length == 0)
                {
                    for (var i = 0; i < 257; i++)
                    {
                        _events.ResetColor?.Invoke((NamedColor)i);
                    }
                    break;
                }

                for (var i = 0; i < parameters.Length; i++)
                {
                    if (TryParseByte(parameters[i].Span, out var index))
                    {
                        _events.ResetColor?.Invoke((NamedColor)index);
                    }
                }
                break;

            case OsCommand.ResetForegroundColor:
                _events.ResetColor?.Invoke(NamedColor.Foreground);
                break;

            case OsCommand.ResetBackgroundColor:
                _events.ResetColor?.Invoke(NamedColor.Background);
                break;

            case OsCommand.ResetCursorColor:
                _events.ResetColor?.Invoke(NamedColor.Cursor);
                break;
            }
        }