public AutoFanControlModel(ILifetimeScope scope, IUIDispatcher dispatcher, FanControlOptions options)
            : base(scope, dispatcher)
        {
            Options     = RegisterProperty <FanControlOptions>(nameof(Options)).WithDefaultValue(options);
            Error       = RegisterProperty <bool>(nameof(Error));
            Reason      = RegisterProperty <string>(nameof(Reason));
            Power       = RegisterProperty <int>(nameof(Power));
            State       = RegisterProperty <State>(nameof(State));
            Pidout      = RegisterProperty <double>(nameof(Pidout));
            PidSetValue = RegisterProperty <int>(nameof(PidSetValue));
            Pt1000      = RegisterProperty <int>(nameof(Pt1000));
            FanRunning  = RegisterProperty <bool>(nameof(FanRunning)).WithDefaultValue(false);

            Context.ActorOf("Fan-Control", Core.FanControl.FanControl.New(options));

            Receive <TrackingEvent>(obs => obs.SubscribeWithStatus(evt =>
            {
                Error       += evt.Error;
                Reason      += evt.Reason;
                Power       += evt.Power;
                State       += evt.State;
                Pidout      += evt.Pidout;
                PidSetValue += evt.PidSetValue;
                Pt1000      += evt.Pt1000;
            }));
            Receive <FanStatusChange>(obs => obs.SubscribeWithStatus(evt => FanRunning += evt.Running));
        }
 public TelloVideoViewModel(
     IUIDispatcher dispatcher,
     IUINotifier notifier,
     IVideoObserver videoObserver)
     : base(dispatcher, notifier)
 {
     _videoObserver = videoObserver ?? throw new ArgumentNullException(nameof(videoObserver));
 }
Example #3
0
 public ItemAdapter(List <Item> movies)
 {
     items      = movies;
     api        = Locator.Get <IApiService>();
     image      = Locator.Get <IImageService>();
     dispatcher = Locator.Get <IUIDispatcher>();
     navigator  = Locator.Get <INavigationService>();
 }
Example #4
0
        public MainWindowViewModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher, IViewModel <MgiStarterControlModel> mgiStarter, IViewModel <AutoFanControlModel> autoFanControl)
            : base(lifetimeScope, dispatcher)
        {
            this.RegisterViewModel("MgiStarter", mgiStarter);
            this.RegisterViewModel("FanControl", autoFanControl);

            NewCommad
            .WithExecute(ShowWindow <LogWindow>)
            .ThenRegister("OpenLogs");
        }
        public MainPage()
        {
            InitializeComponent();

            _dispatcher = new UIDispatcher(SynchronizationContext.Current);
            _notifier   = new UINotifier();

            ViewModel   = CreateMainViewModel(_dispatcher, _notifier);
            DataContext = ViewModel;
            ViewModel.ControllerViewModel.PropertyChanged += ControllerViewModel_PropertyChanged;
        }
Example #6
0
        public PayloadProcessorBase(IRadioObject payload, IEnvironment env, ILog log, IEnumerable <MototrboRadio> radios, ITransmitter transmitter, IUIDispatcher uiDispatcher)
        {
            _env          = env;
            _log          = log;
            _radios       = radios;
            _transmitter  = transmitter;
            _uiDispatcher = uiDispatcher;
            rxObject      = payload;

            _radio = GetRadio(payload.Ip);
        }
        public MainPage()
        {
            this.InitializeComponent();

            this.dispatcher = new UIDispatcher(SynchronizationContext.Current);
            this.notifier   = new UINotifier();

            this.ViewModel   = this.CreateMainViewModel(this.dispatcher, this.notifier);
            this.DataContext = this.ViewModel;
            this.ViewModel.ControllerViewModel.PropertyChanged += this.ControllerViewModel_PropertyChanged;
        }
Example #8
0
 public TelloStateViewModel(
     IUIDispatcher dispatcher,
     IUINotifier notifier,
     IStateObserver stateObserver,
     IRepository repository,
     ISession session)
     : base(dispatcher, notifier)
 {
     this.stateObserver = stateObserver ?? throw new ArgumentNullException(nameof(stateObserver));
     this.repository    = repository ?? throw new ArgumentNullException(nameof(repository));
     this.session       = session ?? throw new ArgumentNullException(nameof(session));
 }
Example #9
0
 public TelloControllerViewModel(
     IUIDispatcher dispatcher,
     IUINotifier notifier,
     IFlightController controller,
     IRepository repository,
     ISession session)
     : base(dispatcher, notifier)
 {
     this.controller = controller ?? throw new ArgumentNullException(nameof(controller));
     this.repository = repository ?? throw new ArgumentNullException(nameof(repository));
     this.session    = session ?? throw new ArgumentNullException(nameof(session));
 }
Example #10
0
        public RxProcessor(IEnvironment env, ILog log, IEventAggregator aggregator, IEnumerable <MototrboRadio> radios, ITransmitter transmitter, IUIDispatcher uiDispatcher)
        {
            _env          = env;
            _log          = log;
            _aggregator   = aggregator;
            _radios       = radios;
            _transmitter  = transmitter;
            _uiDispatcher = uiDispatcher;

            _receiverQueue = new ConcurrentQueue <RxObject>();
            _rxPoolThread  = new Thread(new ThreadStart(Process));
        }
Example #11
0
 static void Main(string[] args)
 {
     try {
         AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         Form mainForm = new PicasaUploaderForm(args);
         UIDispatcher = (IUIDispatcher)mainForm;
         Application.Run(mainForm);
     } catch (Exception e) {
         UnhandledExceptionHandler(e);
     }
 }
Example #12
0
        public ServerManager(IEnvironment env, ILog logger, IEventAggregator aggregator, IEnumerable<MototrboRadio> radios, ILog consoleLog)
        {
            _env = env;
            _log = logger;
            _aggregator = aggregator;
            _radios = radios;
            _consoleLog = consoleLog;

            _transmitter = new Transmiter(_env, _log, _aggregator, _consoleLog);
            _uiDispatcher = new UIDispatcher(_env, _log, _aggregator);
            _rxProcessor = new RxProcessor(_env, _log, _aggregator, _radios, _transmitter, _uiDispatcher);

            _serviceList = new Dictionary<int, IReceiver>();
        }
Example #13
0
        public CenterViewModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher, IOperationManager manager,
                               LocLocalizer localizer, IDialogCoordinator dialogCoordinator,
                               IMainWindowCoordinator mainWindow, ProjectFileWorkspace workspace)
            : base(lifetimeScope, dispatcher)
        {
            var proxy = Context.ActorOf <ObservableActor>("Loading_Proxy");

            this.Receive <IncommingEvent>(e => e.Action());

            Views          = this.RegisterUiCollection <ProjectViewContainer>(nameof(Views)).BindToList(out var viewList);
            CurrentProject = RegisterProperty <int?>(nameof(CurrentProject));

            AddProject(new Project {
                ProjectName = "Dummy"
            });
Example #14
0
        public MainPage()
        {
            this.InitializeComponent();
            // Initialize helper class used to render the skill results on screen
            m_bboxRenderer          = new BoundingBoxRenderer(UIOverlayCanvas);
            m_processedBitmapSource = new SoftwareBitmapSource();

            PopulateCommands();
            ApiContainer.Register <ComputerVisionService>(new ComputerVisionService());
            this.dispatcher = new UIDispatcher(SynchronizationContext.Current);
            this.notifier   = new UINotifier();

            this.ViewModel   = this.CreateMainViewModel(this.dispatcher, this.notifier);
            this.DataContext = this.ViewModel;
            this.ViewModel.ControllerViewModel.PropertyChanged += this.ControllerViewModel_PropertyChanged;

            isListening = false;
        }
        public DocumentEditorViewModel(
            JObject document,
            bool isNew,
            IContainerContext containerContext,
            IDialogService dialogService,
            IUIDispatcher uiDispatcher)
        {
            _document          = document;
            _isNew             = isNew;
            _containerContext  = containerContext;
            _dialogService     = dialogService;
            _uiDispatcher      = uiDispatcher;
            _validateJsonTimer = new Timer(
                state =>
            {
                var @this = ((DocumentEditorViewModel)state !);
                @this._uiDispatcher.Invoke(() => @this.ValidateJson());
            },
                this,
                Timeout.Infinite,
                Timeout.Infinite);

            if (_isNew)
            {
                Title = "New document";
            }
            else
            {
                Title = "Edit document";
            }

            _id          = document["id"].Value <string>();
            _eTag        = document["_etag"]?.Value <string>();
            _text        = document.ToString(Formatting.Indented);
            _isJsonValid = true;

            base.AddButton(new DialogButton
            {
                Text     = "Close",
                Command  = new DelegateCommand(() => Close(null)),
                IsCancel = true
            });
        }
Example #16
0
        public MainViewModel(
            IUIDispatcher dispatcher,
            IUINotifier notifier,
            IRepository repository,
            ITransceiver transceiver,
            IReceiver stateReceiver,
            IReceiver videoReceiver)
            : base(dispatcher, notifier)
        {
            this.tello = new DroneMessenger(transceiver, stateReceiver, videoReceiver);

            repository.CreateCatalog <Session>();
            repository.CreateCatalog <ObservationGroup>();
            repository.CreateCatalog <StateObservation>();
            repository.CreateCatalog <AirSpeedObservation>();
            repository.CreateCatalog <AttitudeObservation>();
            repository.CreateCatalog <BatteryObservation>();
            repository.CreateCatalog <HobbsMeterObservation>();
            repository.CreateCatalog <PositionObservation>();
            repository.CreateCatalog <ResponseObservation>();

            var session = repository.NewEntity <Session>();

            this.StateViewModel = new TelloStateViewModel(
                dispatcher,
                notifier,
                this.tello.StateObserver,
                repository,
                session);

            this.VideoViewModel = new TelloVideoViewModel(
                dispatcher,
                notifier,
                this.tello.VideoObserver);

            this.ControllerViewModel = new TelloControllerViewModel(
                dispatcher,
                notifier,
                this.tello.Controller,
                repository,
                session);
        }
        public LogWindowViewModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher)
            : base(lifetimeScope, dispatcher)
        {
            UnhandledMessages = this.RegisterUiCollection <string>(nameof(UnhandledMessages)).BindToList(out var list);
            list.Add("Start");

            this.SubscribeToEvent <UnhandledMessage>(obs =>
                                                     obs
                                                     .SubscribeWithStatus(obj =>
            {
                var builder = new StringBuilder($"Name: {obj.GetType().Name}");

                foreach (var propertyInfo in obj.Message.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                {
                    builder.Append($" - {propertyInfo.GetValue(obj.Message)}");
                }

                list.Add(builder.ToString());
            }));
        }
        private MainViewModel CreateMainViewModel(IUIDispatcher dispatcher, IUINotifier notifier)
        {
#if EMULATOR_ON
            _simulator = new DroneSimulator();
            var transceiver   = new SimTransceiver(_simulator.MessageHandler);
            var stateReceiver = new SimReceiver(_simulator.StateTransmitter);
            var videoReceiver = new SimReceiver(_simulator.VideoTransmitter);
#else
            var transceiver   = new UdpTransceiver(IPAddress.Parse("192.168.10.1"), 8889);
            var stateReceiver = new UdpReceiver(8890);
            var videoReceiver = new UdpReceiver(11111);
#endif
            return(new MainViewModel(
                       this.dispatcher,
                       this.notifier,
                       new SqliteRepository((null, "tello.sqlite")),
                       transceiver,
                       stateReceiver,
                       videoReceiver));
        }
Example #19
0
        public ArsProcessor(IRadioObject payload, IEnvironment env, ILog log, IEnumerable <MototrboRadio> radios, ITransmitter transmitter, IUIDispatcher uiDispatcher)
            : base(payload, env, log, radios, transmitter, uiDispatcher)
        {
            _action = () =>
            {
                string radioIp = payload.Ip;

                if (_radio != null)
                {
                    var data        = payload.Buffer;
                    var currentDate = DateTime.Now;

                    UIObject toFrontEnd = new UIObject();

                    int PayloadDecimal = 0;
                    if (data.Length > 3)
                    {
                        int a = data[2];
                        int b = data[3];
                        PayloadDecimal = a + b;
                    }
                    else
                    {
                        int a = data[1];
                        int b = data[2];
                        PayloadDecimal = a + b;
                    }

                    _radio.IsOn     = true;
                    _radio.IsOff    = false;
                    _radio.IsUnknow = false;

                    switch (PayloadDecimal)
                    {
                    case 272:
                        //eventoARS.EstadoARS = 1 'RADIO ON
                        _radio.evento         = 1;
                        _radio.dates[0].date  = currentDate;
                        toFrontEnd.MethodName = "arsOn";
                        //Ars Acknowledge transmit
                        _transmitter.Add(ARSAcknowledge());
                        if (_radio.gps_on)
                        {
                            //Gps Interval enabling
                            _transmitter.Add(GPSIntervalRequest());
                            //Emergency enabling
                            _transmitter.Add(GPSEmergencyEnabledRequest());
                        }

                        break;

                    case 64:
                        //eventoARS.EstadoARS = 2 'RADIO UPDATE
                        RemoveTxData(_env.PortArs);

                        //Gps Interval enabling
                        if (_radio.gps_on)
                        {
                            //Gps Interval enabling
                            _transmitter.Add(GPSIntervalRequest());
                            //Emergency enabling
                            _transmitter.Add(GPSEmergencyEnabledRequest());
                        }
                        _radio.dates[0].date  = currentDate;
                        toFrontEnd.MethodName = "arsOn";
                        _radio.evento         = 3;
                        break;

                    case 304:
                        //eventoARS.EstadoARS = 2 'RADIO UPDATE
                        RemoveTxData(_env.PortArs);
                        _radio.dates[0].date  = currentDate;
                        toFrontEnd.MethodName = "arsOn";
                        _radio.evento         = 3;
                        break;

                    case 50:
                    case 81:
                        //eventoARS.EstadoARS = 3 'RADIO OFF
                        RemoveTxData(_env.PortArs);
                        _radio.IsOn           = false;
                        _radio.IsOff          = true;
                        _radio.hasGpsPosition = false;
                        _radio.dates[1].date  = currentDate;
                        toFrontEnd.MethodName = "arsOff";
                        _radio.evento         = 2;
                        break;
                    }

                    toFrontEnd.Id    = payload.Id;
                    toFrontEnd.Radio = _radio;

                    _uiDispatcher.Add(toFrontEnd);

                    Task.Run(() =>
                    {
                        RadiosDomain.Save(_radio);
                    });

                    Task.Run(() =>
                    {
                        ArsDataDomain.Save(_radio);
                    });
                }
            };
        }
        public ProjectViewModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher, LocLocalizer localizer,
                                ProjectFileWorkspace workspace)
            : base(lifetimeScope, dispatcher)
        {
            #region Init

            Languages = this.RegisterUiCollection <ProjectViewLanguageModel>(nameof(Languages))
                        .BindToList(out var languages);
            ProjectEntrys = this.RegisterUiCollection <ProjectEntryModel>(nameof(ProjectEntrys))
                            .BindToList(out var projectEntrys);
            ImportetProjects = this.RegisterUiCollection <string>(nameof(ImportetProjects))
                               .BindToList(out var importprojects);

            var loadTrigger = new Subject <Unit>();

            this.Receive <IncommingEvent>(e => e.Action());

            IsEnabled     = RegisterProperty <bool>(nameof(IsEnabled)).WithDefaultValue(!workspace.ProjectFile.IsEmpty);
            SelectedIndex = RegisterProperty <int>(nameof(SelectedIndex));

            var self = Context.Self;

            void TryUpdateEntry((string ProjectName, string EntryName, ActiveLanguage Lang, string Content) data)
            {
                var(projectName, entryName, lang, content) = data;
                self.Tell(new UpdateRequest(entryName, lang, content, projectName));
            }

            void TryRemoveEntry((string ProjectName, string EntryName) data)
            {
                var(projectName, entryName) = data;
                self.Tell(new RemoveRequest(entryName, projectName));
            }

            Start.Subscribe(_ => Self.Tell(new InitProjectViewModel(workspace.Get(_project))));

            void InitProjectViewModel(InitProjectViewModel obj)
            {
                _project = obj.Project.ProjectName;

                languages.Edit(l =>
                {
                    l.Add(new ProjectViewLanguageModel(localizer.ProjectViewLanguageBoxFirstLabel, true));
                    l.AddRange(obj.Project.ActiveLanguages.Select(al => new ProjectViewLanguageModel(al.Name, false)));
                });
                SelectedIndex += 0;

                projectEntrys.AddRange(obj.Project.Entries.OrderBy(le => le.Key).Select(le
                                                                                        => new ProjectEntryModel(obj.Project, le, TryUpdateEntry, TryRemoveEntry)));

                importprojects.AddRange(obj.Project.Imports);
                loadTrigger.OnNext(Unit.Default);
            }

            this.Receive <InitProjectViewModel>(InitProjectViewModel);

            #endregion

            #region New Entry

            IEnumerable <NewEntryInfoBase> GetEntrys()
            {
                var list = ImportetProjects !.ToList();

                list.Add(_project);

                var allEntrys = list.SelectMany(pro => workspace.Get(pro).Entries.Select(e => e.Key)).ToArray();

                return(allEntrys.Select(e => new NewEntryInfo(e)).OfType <NewEntryInfoBase>()
                       .Concat(allEntrys
                               .Select(s => s.Split('_', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault())
                               .Where(s => !string.IsNullOrWhiteSpace(s))
                               .Distinct(StringComparer.Ordinal)
                               .Select(s => new NewEntrySuggestInfo(s !))));
            }

            void AddEntry(EntryAdd entry)
            {
                if (_project != entry.Entry.Project)
                {
                    return;
                }

                projectEntrys.Add(new ProjectEntryModel(workspace.Get(_project), entry.Entry, TryUpdateEntry,
                                                        TryRemoveEntry));
            }

            NewCommad.WithFlow(ob => ob.Select(_ => GetEntrys())
                               .Dialog(this).Of <INewEntryDialog, NewEntryDialogResult?>()
                               .NotNull()
                               .Mutate(workspace.Entrys).With(em => em.EntryAdd, em => res => em.NewEntry(_project, res.Name))
                               .ObserveOnSelf()
                               .Subscribe(AddEntry))
            .ThenRegister("NewEntry");

            #endregion

            #region Remove Request

            void RemoveEntry(EntryRemove entry)
            {
                if (_project != entry.Entry.Project)
                {
                    return;
                }

                var index = ProjectEntrys !.FindIndex(em => em.EntryName == entry.Entry.Key);

                if (index == -1)
                {
                    return;
                }

                projectEntrys !.RemoveAt(index);
            }

            Receive <RemoveRequest>(obs => obs.Mutate(workspace.Entrys)
                                    .With(em => em.EntryRemove, em => rr => em.RemoveEntry(rr.ProjectName, rr.EntryName))
                                    .ObserveOnSelf()
                                    .Subscribe(RemoveEntry));

            #endregion

            #region Update Request

            void UpdateEntry(EntryUpdate obj)
            {
                if (_project != obj.Entry.Project)
                {
                    return;
                }

                var model = ProjectEntrys !.FirstOrDefault(m => m.EntryName == obj.Entry.Key);

                model?.Update(obj.Entry);
            }

            Receive <UpdateRequest>(obs => obs.Mutate(workspace.Entrys).With(em => em.EntryUpdate,
                                                                             em => ur => em.UpdateEntry(ur.ProjectName, ur.Language, ur.EntryName, ur.Content))
                                    .ObserveOnSelf()
                                    .Subscribe(UpdateEntry));

            #endregion

            #region Imports

            void AddImport(AddImport obj)
            {
                var(projectName, import) = obj;
                if (projectName != _project)
                {
                    return;
                }
                importprojects !.Add(import);
            }

            IEnumerable <string> GetImportableProjects()
            {
                var pro = workspace.Get(_project);

                return(workspace.ProjectFile.Projects.Select(p => p.ProjectName)
                       .Where(p => p != _project && !pro.Imports.Contains(p)));
            }

            ImportSelectIndex = RegisterProperty <int>(nameof(ImportSelectIndex)).WithDefaultValue(-1);

            NewCommad.WithCanExecute(from trigger in loadTrigger
                                     select GetImportableProjects().Any())
            .WithFlow(ob => ob.Select(_ => GetImportableProjects())
                      .Dialog(this).Of <IImportProjectDialog, ImportProjectDialogResult?>()
                      .NotNull()
                      .Mutate(workspace.Projects).With(pm => pm.NewImport, pm => r => pm.AddImport(_project, r.Project))
                      .ObserveOnSelf()
                      .Subscribe(AddImport))
            .ThenRegister("AddImport");

            void RemoveImport(RemoveImport import)
            {
                var(targetProject, toRemove) = import;
                if (_project != targetProject)
                {
                    return;
                }

                importprojects !.Remove(toRemove);
            }

            NewCommad.WithCanExecute(ImportSelectIndex.Select(i => i != -1))
            .WithFlow(ob => ob.Select(_ => new InitImportRemove(ImportetProjects[ImportSelectIndex]))
                      .Mutate(workspace.Projects).With(pm => pm.RemoveImport,
                                                       pm => ir => pm.TryRemoveImport(_project, ir.ToRemove))
                      .Subscribe(RemoveImport))
            .ThenRegister("RemoveImport");

            workspace.Projects.NewImport.ToUnit().Subscribe(loadTrigger).DisposeWith(this);
            workspace.Projects.RemoveImport.ToUnit().Subscribe(loadTrigger).DisposeWith(this);

            #endregion

            #region AddLanguage

            void AddActiveLanguage(AddActiveLanguage language)
            {
                if (language.ProjectName != _project)
                {
                    return;
                }

                languages.Add(new ProjectViewLanguageModel(language.ActiveLanguage.Name, false));

                foreach (var model in ProjectEntrys)
                {
                    model.AddLanguage(language.ActiveLanguage);
                }
            }

            NewCommad.WithFlow(ob => ob
                               .Select(_ => workspace.Get(_project).ActiveLanguages.Select(al => al.ToCulture()).ToArray())
                               .Dialog(this).Of <ILanguageSelectorDialog, AddLanguageDialogResult?>()
                               .NotNull()
                               .Mutate(workspace.Projects)
                               .With(pm => pm.NewLanguage, pm => d => pm.AddLanguage(_project, d.CultureInfo))
                               .Subscribe(AddActiveLanguage))
            .ThenRegister("AddLanguage");

            #endregion
        }
Example #21
0
        public MainWindowViewModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher,
                                   IOperationManager operationManager, LocLocalizer localizer, IDialogCoordinator dialogCoordinator,
                                   AppConfig config, IDialogFactory dialogFactory, IViewModel <CenterViewModel> model,
                                   IMainWindowCoordinator mainWindowCoordinator, ProjectFileWorkspace workspace)
            : base(lifetimeScope, dispatcher)
        {
            this.Receive <IncommingEvent>(e => e.Action());

            var last             = new RxVar <ProjectFile?>(null);
            var loadingOperation = new RxVar <OperationController?>(null);

            var self = Self;

            CenterView = this.RegisterViewModel(nameof(CenterView), model);
            workspace.Source.ProjectReset.RespondOn(null, pr => last.Value = pr.ProjectFile);

            #region Restarting

            Start.Subscribe(_ =>
            {
                if (last != null)
                {
                    Self.Tell(last);
                }
            });
            this.Receive <ProjectFile>(workspace.Reset);

            #endregion

            #region Operation Manager

            RunningOperations = RegisterProperty <IEnumerable <RunningOperation> >(nameof(RunningOperations))
                                .WithDefaultValue(operationManager.RunningOperations);
            RenctFiles = RegisterProperty <RenctFilesCollection>(nameof(RenctFiles))
                         .WithDefaultValue(new RenctFilesCollection(config, s => self.Tell(new InternlRenctFile(s))));

            NewCommad.WithExecute(operationManager.Clear, operationManager.ShouldClear()).ThenRegister("ClearOp");
            NewCommad.WithExecute(operationManager.CompledClear, operationManager.ShouldCompledClear())
            .ThenRegister("ClearAllOp");

            #endregion

            #region Save As

            IObservable <UpdateSource> SaveAsProject()
            {
                var targetFile = dialogFactory.ShowSaveFileDialog(null, true, false, true, "transp", true,
                                                                  localizer.OpenFileDialogViewDialogFilter, true, true, localizer.MainWindowMainMenuFileSaveAs,
                                                                  Directory.GetCurrentDirectory());

                return(targetFile.NotEmpty()
                       .SelectMany(CheckSourceOk)
                       .Where(d => d.Item1)
                       .Select(r => new UpdateSource(r.Item2)));
            }

            async Task <(bool, string)> CheckSourceOk(string source)
            {
                if (!string.IsNullOrWhiteSpace(source))
                {
                    return(true, source);
                }
                await UICall(()
                             => dialogCoordinator.ShowMessage(localizer.CommonError,
                                                              localizer.MainWindowModelLoadProjectSourceEmpty !));

                return(false, source);
            }

            NewCommad.WithCanExecute(last.Select(pf => pf != null && !pf.IsEmpty))
            .WithFlow(ob => ob.SelectMany(_ => SaveAsProject())
                      .ToModel(CenterView))
            .ThenRegister("SaveAs");

            #endregion

            #region Open File

            IDisposable NewProjectFile(IObservable <SourceSelected> source) => source
            .SelectMany(SourceSelectedFunc)
            .NotNull()
            .ObserveOnSelf()
            .Select(ProjectLoaded)
            .ToModel(CenterView !);


            this.Receive <InternlRenctFile>(o => OpentFileSource(o.File));

            IObservable <LoadedProjectFile?> SourceSelectedFunc(SourceSelected s)
            {
                if (s.Mode != OpenFileMode.OpenExistingFile)
                {
                    return(NewFileSource(s.Source));
                }
                OpentFileSource(s.Source);
                return(Observable.Return <LoadedProjectFile?>(null));
            }

            void OpentFileSource(string?rawSource)
            {
                Observable.Return(rawSource)
                .NotEmpty()
                .SelectMany(CheckSourceOk)
                .Select(p => p.Item2)
                .Do(_ => mainWindowCoordinator.IsBusy = true)
                .SelectMany(source => operationManager
                            .StartOperation(string.Format(localizer.MainWindowModelLoadProjectOperation,
                                                          Path.GetFileName(source)))
                            .Do(op => loadingOperation !.Value = op)
                            .Select(operationController => (operationController, source)))
                .Do(_ =>
                {
                    if (!workspace.ProjectFile.IsEmpty)
                    {
                        workspace.ProjectFile.Operator.Tell(ForceSave.Force(workspace.ProjectFile));
                    }
                })
                .ObserveOnSelf()
                .Subscribe(pair
                           => ProjectFile.BeginLoad(Context, pair.operationController.Id, pair.source,
                                                    "Project_Operator"));
            }

            SupplyNewProjectFile?ProjectLoaded(LoadedProjectFile obj)
            {
                try
                {
                    if (loadingOperation !.Value != null)
                    {
                        if (obj.Ok)
                        {
                            loadingOperation.Value.Compled();
                        }
                        else
                        {
                            loadingOperation.Value.Failed(obj.ErrorReason?.Message ?? localizer.CommonError);
                            return(null);
                        }
                    }

                    loadingOperation.Value = null;
                    if (obj.Ok)
                    {
                        RenctFiles !.Value.AddNewFile(obj.ProjectFile.Source);
                    }

                    last !.Value = obj.ProjectFile;

                    return(new SupplyNewProjectFile(obj.ProjectFile));
                }
                finally
                {
                    mainWindowCoordinator.IsBusy = false;
                }
            }

            NewCommad.WithCanExecute(loadingOperation.Select(oc => oc == null))
            .WithFlow(obs => NewProjectFile(obs.Dialog(this, TypedParameter.From(OpenFileMode.OpenExistingFile))
                                            .Of <IOpenFileDialog, string?>()
                                            .Select(s => SourceSelected.From(s, OpenFileMode.OpenExistingFile))))
            .ThenRegister("OpenFile");

            NewProjectFile(Receive <SourceSelected>()).DisposeWith(this);
            Receive <LoadedProjectFile>(ob => ob.Select(ProjectLoaded).ToModel(CenterView !));

            #endregion

            #region New File

            IObservable <LoadedProjectFile?> NewFileSource(string?source)
            {
                source ??= string.Empty;
                var data = new LoadedProjectFile(string.Empty,
                                                 ProjectFile.NewProjectFile(Context, source, "Project_Operator"), null, true);

                if (File.Exists(source))
                {
                    //TODO NewFile Filog Message
                    var result = UICall(async()
                                        => await dialogCoordinator.ShowMessage(localizer.CommonError !, "", null));

                    return(result.Where(b => b == true).Do(_ => mainWindowCoordinator.IsBusy = true).Select(_ => data));
                }

                mainWindowCoordinator.IsBusy = true;
                return(Observable.Return(data));
            }

            NewCommad.WithCanExecute(loadingOperation.Select(oc => oc == null))
            .WithFlow(obs => obs.Dialog(this, TypedParameter.From(OpenFileMode.OpenNewFile))
                      .Of <IOpenFileDialog, string?>()
                      .Select(s => SourceSelected.From(s, OpenFileMode.OpenNewFile))
                      .ToSelf())
            .ThenRegister("NewFile");

            #endregion

            #region Analyzing

            AnalyzerEntries = this.RegisterUiCollection <AnalyzerEntry>(nameof(AnalyzerEntries))
                              .BindToList(out var analyterList);

            var builder = new AnalyzerEntryBuilder(localizer);

            void IssuesChanged(IssuesEvent obj)
            {
                analyterList.Edit(l =>
                {
                    var(ruleName, issues) = obj;
                    l.Remove(AnalyzerEntries.Where(e => e.RuleName == ruleName));
                    l.AddRange(issues.Select(builder.Get));
                });
            }

            this.RespondOnEventSource(workspace.Analyzer.Issues, IssuesChanged);

            #endregion

            #region Build

            var buildModel = lifetimeScope.Resolve <IViewModel <BuildViewModel> >();
            buildModel.InitModel(Context, "Build-View");

            BuildModel = RegisterProperty <IViewModel <BuildViewModel> >(nameof(BuildModel)).WithDefaultValue(buildModel);

            #endregion
        }
 public DialogFactory(IUIDispatcher currentDispatcher, IMainWindow mainWindow)
 {
     _mainWindow       = ((WpfWindow)mainWindow.Window).Window;
     CurrentDispatcher = currentDispatcher;
 }
 private DispatcherScheduler(IUIDispatcher dispatcher) => _dispatcher = dispatcher;
 public ViewConnector(string name, DataContextPromise promise, Action <object> updater, IUIDispatcher dispatcher)
     : base(name, promise)
 {
     _updater    = updater;
     _dispatcher = dispatcher;
 }
Example #25
0
        public SmsProcessor(IRadioObject payload, IEnvironment env, ILog log, IEnumerable <MototrboRadio> radios, ITransmitter transmitter, IUIDispatcher uiDispatcher)
            : base(payload, env, log, radios, transmitter, uiDispatcher)
        {
            _action = () =>
            {
                string   radioIp     = payload.Ip;
                DateTime currentDate = DateTime.Now;

                if (_radio != null)
                {
                    byte[] Data = payload.Buffer;

                    UIObject toFrontEnd = new UIObject();

                    if (Data[2] == 191)
                    {
                        _radio.IsInsmsSending = false;
                        RemoveTxData(_env.PortSms);
                    }
                    if (Data[2] != 191)
                    {
                        //Sms acknowloedge
                        _transmitter.Add(SMSAcknowledge());
                        //

                        byte[] textB = Data.Skip(10 + Data[3]).ToArray();

                        string Text = System.Text.Encoding.Unicode.GetString(textB);

                        SmsDataTable dataTable = new SmsDataTable()
                        {
                            de     = _radio.radio_id.ToString(),
                            evento = 9,
                            fecha  = DateTime.Now,
                            para   = _radio.despacho,
                            sms    = Text,
                            sms_id = -1
                        };

                        _radio.message = Text;

                        _radio.dates[3].date = DateTime.Now;

                        toFrontEnd.MethodName = "smsIn";

                        toFrontEnd.Radio = _radio;

                        _uiDispatcher.Add(toFrontEnd);

                        Task.Run(() =>
                        {
                            RadiosDomain.Save(_radio);
                        });

                        Task.Run(() =>
                        {
                            SmsInDataDomain.Save(dataTable);
                        });
                    }
                }
            };
        }
Example #26
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AppDialog"/> class.
        /// </summary>
        /// <param name="dispatcher">
        /// The dispatcher for launching dialogs on the UI thread.
        /// </param>
        public AppDialog(IUIDispatcher dispatcher)
        {
            this.dispatcher = dispatcher;

            this.dialogSemaphore = new SemaphoreSlim(1, 1);
        }
Example #27
0
 public static void Init(IUIDispatcher dispatcher)
 {
     if (UIDispatcher.current == null)
     UIDispatcher.current = dispatcher;
 }
Example #28
0
        public MgiStarterControlModel(ILifetimeScope lifetimeScope, IUIDispatcher dispatcher, ProcessConfig config, IDialogFactory dialogFactory)
            : base(lifetimeScope, dispatcher)
        {
            Client        = RegisterProperty <Process?>(nameof(Client)).OnChange(UpdateLabel);
            Kernel        = RegisterProperty <Process?>(nameof(Kernel)).OnChange(UpdateLabel);
            Status        = RegisterProperty <string?>(nameof(Status)).OnChange(UpdateLabel);
            InternalStart = RegisterProperty <bool>(nameof(InternalStart)).OnChange(UpdateLabel);
            StatusLabel   = RegisterProperty <string?>(nameof(StatusLabel));

            _localHelper = new LocalHelper(Context);
            _config      = config;

            _processManager = Context.ActorOf("Process-Manager", ProcessManagerActor.New());
            var mgiStarting = Context.ActorOf("Mgi-Starter", MgiStartingActor.New(dialogFactory));

            var currentStart = new BehaviorSubject <CancellationTokenSource?>(null).DisposeWith(this);

            (from start in currentStart
             from state in InternalStart
             where !state
             select start
            ).SubscribeWithStatus(s => s?.Dispose())
            .DisposeWith(this);

            Receive <ProcessStateChange>(obs => obs.SubscribeWithStatus(ProcessStateChangeHandler));
            Receive <MgiStartingActor.TryStartResponse>(obs => obs.SubscribeWithStatus(_ =>
            {
                currentStart.OnNext(null);
                InternalStart += false;
            }));
            Receive <MgiStartingActor.StartStatusUpdate>(obs => obs.SubscribeWithStatus(s => Status += s.Status));

            NewCommad
            .WithCanExecute(InternalStart.Select(b => !b))
            .WithExecute(() =>
            {
                InternalStart += true;
                currentStart.OnNext(new CancellationTokenSource());

                mgiStarting.Tell(new MgiStartingActor.TryStart(_config, currentStart.Value !.Token,
                                                               () =>
                {
                    Client.Value?.Kill(true);
                    Kernel.Value?.Kill(true);
                }));
            }).ThenRegister("TryStart");

            NewCommad
            .WithCanExecute(from client in Client
                            select client != null)
            .WithCanExecute(from kernel in Kernel
                            select kernel != null)
            .WithExecute(() =>
            {
                currentStart.Value?.Cancel();
                Client.Value?.Kill(true);
                Kernel.Value?.Kill(true);
            }).ThenRegister("TryStop");

            InternalStart += false;
            UpdateLabel();
        }
Example #29
0
 public ViewModel(IUIDispatcher dispatcher, IUINotifier userNotifier)
     : base(dispatcher)
 {
     this.DisplayName  = $"#{this.GetType().Name}#";
     this.UserNotifier = userNotifier ?? throw new ArgumentNullException(nameof(userNotifier));
 }
Example #30
0
        public GpsProcessor(IRadioObject payload, IEnvironment env, ILog log, IEnumerable <MototrboRadio> radios, ITransmitter transmitter, IUIDispatcher uiDispatcher)
            : base(payload, env, log, radios, transmitter, uiDispatcher)
        {
            _action = () =>
            {
                string radioIp = payload.Ip;

                int  DatumIndexStart = 9;
                bool HasGpsData      = false;

                if (_radio != null)
                {
                    byte[]   Data       = payload.Buffer;
                    UIObject toFrontEnd = new UIObject();

                    _radio.emerg_on = false;

                    if (!_radio.IsOn)
                    {
                        _radio.IsOn     = true;
                        _radio.IsOff    = false;
                        _radio.IsUnknow = false;
                    }

                    //Localizacion instantanea correcta

                    if (Data[0] == 7 & !(Data[1] == 0xc))
                    {
                        HasGpsData      = true;
                        _radio.evento   = 6;
                        DatumIndexStart = 15;

                        RemoveTxData(_env.PortGps, new byte[] { 0x05, 0x08, 0x22, 0x04, 0x24, 0x68, 0xAC, 0xE0, 0x51, 0x62 });
                    }

                    //GPS instantaneo respuesta acknowledge.
                    if (Data[0] == 0xb)
                    {
                        _radio.IsInIntervalLocationSending = false;

                        RemoveTxData(_env.PortGps, new byte[] { 0x05, 0x08, 0x22, 0x04, 0x24, 0x68, 0xAC, 0xE0, 0x51, 0x62 });
                    }

                    //GPS localizacion intervalo correcta
                    if (Data[0] == 0xd & !(Data[1] == 0xc))
                    {
                        if (string.IsNullOrEmpty(_radio.latitud))
                        {
                            RemoveTxData(_env.PortGps, DataToSend.GPS_INTERVAL_ON);
                        }

                        _radio.evento = 7;
                        HasGpsData    = true;
                    }

                    //GPS localizacion intervalo stop
                    if (Data[0] == 0xb && Data[1] == 0x07)
                    {
                        RemoveTxData(_env.PortGps, DataToSend.GPS_INTERVAL_OFF);
                    }

                    if ((Data[0] == 0xb & Data[7] == 0xe1))
                    {
                        _radio.IsInEmergencySending = false;
                        RemoveTxData(_env.PortGps, DataToSend.EMERGENCY_ON);
                    }

                    if ((Data[0] == 0xd & Data[7] == 0xe1))
                    {
                        _transmitter.Add(GPSEmergencyEnabledRequest());

                        _radio.latitud       = "0";
                        _radio.longitud      = "0";
                        _radio.velocidad     = "0";
                        _radio.dates[2].date = DateTime.Now;
                        _radio.emerg_on      = true;
                        _radio.evento        = 8;
                        if (!(Data[8] == 0x37 || Data[8] == 0x38))
                        {
                            HasGpsData = true;
                        }

                        toFrontEnd.MethodName = "emergency";
                    }

                    if (HasGpsData)
                    {
                        _radio.IsInInstantLocationSending = false;
                        //List<double> GpsDatum = ResolveDatum(DatumIndexStart, DatumIndexStart + 4, Data);
                        Helpers.GpsDatum Datum = new Helpers.GpsDatum(DatumIndexStart, DatumIndexStart + 4, Data);

                        _radio.latitud   = Datum.latitude.ToString().Replace(",", ".");
                        _radio.longitud  = Datum.longitude.ToString().Replace(",", ".");
                        _radio.velocidad = Datum.speed.ToString().Replace(",", ".");

                        _radio.hasGpsPosition = true;

                        _radio.dates[2].date = DateTime.Now;

                        if (!_radio.emerg_on)
                        {
                            toFrontEnd.MethodName = "gpsData";
                        }
                    }

                    toFrontEnd.Radio = _radio;

                    _uiDispatcher.Add(toFrontEnd);

                    Task.Run(() =>
                    {
                        GpsDataDomain.Save(_radio);
                    });

                    Task.Run(() =>
                    {
                        RadiosDomain.Save(_radio);
                    });
                }
            };
        }
 public WindowService(IUIDispatcher dispatcher)
 {
     _dispatcher = dispatcher;
 }
 public PropertyChangedNotifier(IUIDispatcher dispatcher)
 {
     Dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher));
 }