Example #1
0
        public MainViewModel(Settings settings,
                             LanguageManager languageManager,
                             HotKeyManager hotKeyManager,
                             IPreviewWindow previewWindow,
                             IDialogService dialogService,
                             RecordingModel recordingModel,
                             MainModel mainModel) : base(settings, languageManager)
        {
            _dialogService = dialogService;

            ShowPreviewCommand = new DelegateCommand(previewWindow.Show);

            #region Commands
            RefreshCommand = recordingModel
                             .ObserveProperty(model => model.RecorderState)
                             .Select(recorderState => recorderState == RecorderState.NotRecording)
                             .ToReactiveCommand()
                             .WithSubscribe(() =>
            {
                mainModel.Refresh();

                Refreshed?.Invoke();
            });

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => settings.FFmpeg.FolderPath = "");

            TrayLeftClickCommand = new DelegateCommand(() => hotKeyManager.FakeHotKey(settings.Tray.LeftClickAction));
            #endregion
        }
        public ConsoleManager(Settings Settings,
                              RecordingModel RecordingModel,
                              MainModel MainModel,
                              ScreenShotModel ScreenShotModel,
                              VideoSourcesViewModel VideoSourcesViewModel,
                              IEnumerable <IVideoSourceProvider> VideoSourceProviders,
                              VideoWritersViewModel VideoWritersViewModel,
                              IPlatformServices PlatformServices,
                              WebcamModel WebcamModel,
                              IMessageProvider MessageProvider)
        {
            _settings              = Settings;
            _recordingModel        = RecordingModel;
            _mainModel             = MainModel;
            _screenShotModel       = ScreenShotModel;
            _videoSourcesViewModel = VideoSourcesViewModel;
            _videoSourceProviders  = VideoSourceProviders;
            _videoWritersViewModel = VideoWritersViewModel;
            _platformServices      = PlatformServices;
            _webcamModel           = WebcamModel;
            _messageProvider       = MessageProvider;

            // Hide on Full Screen Screenshot doesn't work on Console
            Settings.UI.HideOnFullScreenShot = false;
        }
Example #3
0
        public override Task <RecordingModel> GetRecordingFile(RecordingLookupModel request, ServerCallContext context)
        {
            RecordingModel output = new RecordingModel();

            var Recording = _appDbContext.Recordings.FirstOrDefault(r => r.Id == request.RecordingId);

            if (Recording == null)
            {
                throw new Exception("Brak wpisu w bazie");
            }
            var filePath = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\recordings", Recording.RecordingPath);

            using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                byte[] RecordingData = System.IO.File.ReadAllBytes(filePath);

                fileStream.Read(RecordingData, 0, System.Convert.ToInt32(fileStream.Length));


                output.RefordingFile = ByteString.CopyFrom(RecordingData);
            }

            output.Id        = Recording.Id;
            output.Name      = Recording.Name;
            output.Extension = Path.GetExtension(filePath);

            return(Task.FromResult(output));
        }
Example #4
0
        public RecordingViewModel(RecordingModel recordingModel,
                                  Settings settings,
                                  TimerModel timerModel,
                                  VideoSourcesViewModel videoSourcesViewModel)
        {
            _recordingModel = recordingModel;

            RecordCommand = new[]
            {
                settings.Audio
                .ObserveProperty(audioSettings => audioSettings.Enabled),
                videoSourcesViewModel
                .ObserveProperty(sourcesViewModel => sourcesViewModel.SelectedVideoSourceKind)
                .Select(videoSourceProvider => !(videoSourceProvider is NoVideoSourceProvider))
            }
            .CombineLatest(bools => bools[0] || bools[1])
            .ToReactiveCommand()
            .WithSubscribe(recordingModel.OnRecordExecute);

            PauseCommand = new[]
            {
                timerModel
                .ObserveProperty(model => model.Waiting),
                recordingModel
                .ObserveProperty(model => model.RecorderState)
                .Select(recorderState => recorderState != RecorderState.NotRecording)
            }
            .CombineLatest(bools => !bools[0] && bools[1])
            .ToReactiveCommand()
            .WithSubscribe(recordingModel.OnPauseExecute);

            recordingModel.PropertyChanged += (sender, e) =>
            {
                switch (e.PropertyName)
                {
                case "":
                case null:
                case nameof(RecorderState):
                    RaisePropertyChanged(nameof(RecorderState));
                    break;
                }
            };
        }
Example #5
0
        public ConsoleManager(Settings Settings,
                              RecordingModel RecordingModel,
                              MainModel MainModel,
                              ScreenShotModel ScreenShotModel,
                              VideoSourcesViewModel VideoSourcesViewModel,
                              IEnumerable <IVideoSourceProvider> VideoSourceProviders,
                              IWebCamProvider WebCamProvider, VideoWritersViewModel VideoWritersViewModel)
        {
            _settings              = Settings;
            _recordingModel        = RecordingModel;
            _mainModel             = MainModel;
            _screenShotModel       = ScreenShotModel;
            _videoSourcesViewModel = VideoSourcesViewModel;
            _videoSourceProviders  = VideoSourceProviders;
            _webCamProvider        = WebCamProvider;
            _videoWritersViewModel = VideoWritersViewModel;

            // Hide on Full Screen Screenshot doesn't work on Console
            Settings.UI.HideOnFullScreenShot = false;
        }
Example #6
0
        public ConsoleManager(Settings settings,
                              RecordingModel recordingModel,
                              MainModel mainModel,
                              ScreenShotModel screenShotModel,
                              VideoSourcesViewModel videoSourcesViewModel,
                              IEnumerable <IVideoSourceProvider> videoSourceProviders,
                              IWebCamProvider webCamProvider,
                              VideoWritersViewModel videoWritersViewModel,
                              IPlatformServices platformServices)
        {
            _settings              = settings;
            _recordingModel        = recordingModel;
            _mainModel             = mainModel;
            _screenShotModel       = screenShotModel;
            _videoSourcesViewModel = videoSourcesViewModel;
            _videoSourceProviders  = videoSourceProviders;
            _webCamProvider        = webCamProvider;
            _videoWritersViewModel = videoWritersViewModel;
            _platformServices      = platformServices;

            // Hide on Full Screen Screenshot doesn't work on Console
            settings.Ui.HideOnFullScreenShot = false;
        }
Example #7
0
        public MainVM()
        {
            Games      = new ObservableCollection <GameVM>();
            Messages   = new ObservableCollection <string>();
            StartupCmd = new RelayCommand(OnStartUpCmd);
            MainSupModel   sup = new MainSupModel();
            RecordingModel rec = new RecordingModel();

            system = ActorSystem.Create("helloAkka");
            super  = system.ActorOf(MainSupervisor.Create(sup), "supervisor");
            recer  = system.ActorOf(RecordingActor.Create(rec), "recorder");

            int phlwins   = 0;
            int phllosses = 0;

            GameFiles = System.IO.Directory.GetFiles(GamePath).Where(f => f.Contains(".csv")).ToArray();

            rec.OnRecord += (m =>
            {
                Application.Current.Dispatcher.BeginInvoke(
                    DispatcherPriority.Normal,
                    new Action(() =>
                {
                    try
                    {
                        var gm = Newtonsoft.Json.JsonConvert.DeserializeObject <GameVM>(m);

                        if (gm.IsGameOver == "T" && (gm.HomeTeam == "PHI" || gm.AwayTeam == "PHI"))
                        {
                            if ((gm.HomeTeam == "PHI" && gm.HomeRuns > gm.AwayRuns) || (gm.AwayTeam == "PHI" && gm.AwayRuns > gm.HomeRuns))
                            {
                                phlwins++;
                            }
                            else
                            {
                                phllosses++;
                            }
                            Messages.Add($"{GamesPlayed++, 3} {gm.HomeTeam, -4} {gm.HomeRuns, 2}  {gm.AwayTeam, -4} {gm.AwayRuns, 2}  {phlwins,3} - {phllosses, -3}");
                        }

                        var gamevm = Games.FirstOrDefault(g => g.GameID == gm.GameID);
                        if (gamevm == null)
                        {
                            Games.Add(gm);
                        }
                        else
                        {
                            var gm1 = Games.First(g => g.GameID == gm.GameID);
                            gm1.Inning = gm.Inning;
                            gm1.AwayTeam = gm.AwayTeam;
                            gm1.AwayRuns = gm.AwayRuns;
                            gm1.HomeTeam = gm.HomeTeam;
                            gm1.HomeRuns = gm.HomeRuns;
                            gm1.Out1 = gm.Out1;
                            gm1.Out2 = gm.Out2;
                            gm1.RunnerOnFirst = gm.RunnerOnFirst;
                            gm1.RunnerOnSecond = gm.RunnerOnSecond;
                            gm1.RunnerOnThird = gm.RunnerOnThird;
                            gm1.Strike1 = gm.Strike1;
                            gm1.Strike2 = gm.Strike2;
                            gm1.Ball1 = gm.Ball1;
                            gm1.Ball2 = gm.Ball2;
                            gm1.Ball3 = gm.Ball3;
                        }
                    }
                    catch (Exception ex)
                    {
                        //Messages.Add(m);
                    }
                }));
            });
        }
Example #8
0
        public RecordingModule(IStumpsHost stumpsHost)
        {
            stumpsHost = stumpsHost ?? throw new ArgumentNullException(nameof(stumpsHost));

            Get["/api/proxy/{serverId}/recording"] = _ =>
            {
                var serverId    = (string)_.serverId;
                var environment = stumpsHost.FindServer(serverId);
                var afterIndex  = -1;

                if (Request.Query.after != null)
                {
                    var afterIndexString = (string)Request.Query.after;
                    afterIndex = int.TryParse(afterIndexString, out afterIndex) ? afterIndex : -1;
                }

                var recordingList = environment.Recordings.Find(afterIndex);
                var modelList     = new List <RecordingModel>();

                foreach (var recording in recordingList)
                {
                    afterIndex++;

                    var model = new RecordingModel
                    {
                        Index             = afterIndex,
                        Date              = recording.ReceivedDate,
                        Method            = recording.Request.HttpMethod,
                        RawUrl            = recording.Request.RawUrl,
                        RequestSize       = recording.Request.BodyLength,
                        ResponseSize      = recording.Response.BodyLength,
                        StatusCode        = recording.Response.StatusCode,
                        StatusDescription = recording.Response.StatusDescription
                    };

                    modelList.Add(model);
                }

                return(Response.AsJson(modelList));
            };

            Get["/api/proxy/{serverId}/recording/{recordIndex}"] = _ =>
            {
                var serverId    = (string)_.serverId;
                var recordIndex = (int)_.recordIndex;
                var server      = stumpsHost.FindServer(serverId);

                var record = server.Recordings.FindAt(recordIndex);

                var model = new RecordingDetailsModel
                {
                    Index                     = recordIndex,
                    RequestBody               = string.Empty,
                    RequestBodyIsImage        = record.Request.BodyType == HttpBodyClassification.Image,
                    RequestBodyIsText         = record.Request.BodyType == HttpBodyClassification.Text,
                    RequestBodyLength         = record.Request.BodyLength,
                    RequestBodyUrl            = "/api/proxy/" + serverId + "/recording/" + recordIndex + "/request",
                    RequestHttpMethod         = record.Request.HttpMethod,
                    RequestRawUrl             = record.Request.RawUrl,
                    RequestDate               = record.ReceivedDate,
                    ResponseBody              = string.Empty,
                    ResponseBodyIsImage       = record.Response.BodyType == HttpBodyClassification.Image,
                    ResponseBodyIsText        = record.Response.BodyType == HttpBodyClassification.Text,
                    ResponseBodyLength        = record.Response.BodyLength,
                    ResponseBodyUrl           = "/api/proxy/" + serverId + "/recording/" + recordIndex + "/response",
                    ResponseStatusCode        = record.Response.StatusCode,
                    ResponseStatusDescription = record.Response.StatusDescription
                };

                model.RequestBody = record.Request.BodyType == HttpBodyClassification.Text
                                         ? record.Request.GetBodyAsString()
                                         : string.Empty;

                model.ResponseBody = record.Response.BodyType == HttpBodyClassification.Text
                                          ? record.Response.GetBodyAsString()
                                          : string.Empty;

                model.RequestHeaders  = GenerateHeaderModels(record.Request);
                model.ResponseHeaders = GenerateHeaderModels(record.Response);

                return(Response.AsJson(model));
            };

            Get["/api/proxy/{serverId}/recording/{recordIndex}/request"] = _ =>
            {
                var serverId    = (string)_.serverId;
                var recordIndex = (int)_.recordIndex;
                var environment = stumpsHost.FindServer(serverId);

                var record = environment.Recordings.FindAt(recordIndex);

                var ms = new System.IO.MemoryStream(record.Request.GetBody());

                return(Response.FromStream(ms, record.Request.Headers["Content-Type"]));
            };

            Get["/api/proxy/{serverId}/recording/{recordIndex}/response"] = _ =>
            {
                var serverId    = (string)_.serverId;
                var recordIndex = (int)_.recordIndex;
                var server      = stumpsHost.FindServer(serverId);

                var record = server.Recordings.FindAt(recordIndex);

                var ms = new System.IO.MemoryStream(record.Response.GetBody());

                return(Response.FromStream(ms, record.Response.Headers["Content-Type"]));
            };

            Get["/api/proxy/{serverId}/recording/status"] = _ =>
            {
                var serverId = (string)_.serverId;
                var server   = stumpsHost.FindServer(serverId);

                var model = new RecordStatusModel
                {
                    RecordTraffic = server.RecordTraffic
                };

                return(Response.AsJson(model));
            };

            Put["/api/proxy/{serverId}/recording/status"] = _ =>
            {
                var serverId = (string)_.serverId;
                var server   = stumpsHost.FindServer(serverId);

                var model = this.Bind <RecordStatusModel>();

                if (model.RecordTraffic)
                {
                    server.Recordings.Clear();
                }

                server.RecordTraffic = model.RecordTraffic;

                return(Response.AsJson(model));
            };
        }