/// <summary> Конструктор </summary>
        public ViewModelCallRedirect(ModelCall currentModelCall)
        {
            var callerModelContact = currentModelCall?.ModelContactObj;

            ListModelContact = callerModelContact == null?DataSourceContact.GetListModelContact() : DataSourceContact.GetListModelContact().Where(a => a.Id != currentModelCall.ModelContactObj.Id).ToList();

            CurrentModelCall = currentModelCall;

            ApplyFilter(); // автоматически присвоит CurrentListModelContact

            CallbackRouter.Instance.ListModelContactStatusChanged       += OnListModelContactStatusChanged;
            CallbackRouter.Instance.ListModelContactSubscriptionChanged += OnListModelContactSubscriptionChanged;
            CallbackRouter.Instance.ModelCallChanged += OnModelCallChanged;

            CommandApplyFilterAllContact      = new Command(obj => ApplyFilterListFilterContact(@"ViewModelCallRedirect_AllContact"));
            CommandApplyFilterDodicallContact = new Command(obj => ApplyFilterListFilterContact(@"ViewModelCallRedirect_DodicallContact"));
            CommandApplyFilterSavedContact    = new Command(obj => ApplyFilterListFilterContact(@"ViewModelCallRedirect_SavedContact"));
            CommandApplyFilterBlockedContact  = new Command(obj => ApplyFilterListFilterContact(@"ViewModelCallRedirect_BlockedContact"));
            CommandApplyFilterWhiteContact    = new Command(obj => ApplyFilterListFilterContact(@"ViewModelCallRedirect_WhiteContact"));

            CommandSelectContactList = new Command(obj => SelectContactList());
            CommandSelectHistoryList = new Command(obj => SelectHistoryList());
            CommandSelectDialpadList = new Command(obj => SelectDialpadList());

            ContactList = true;
        }
        /// <summary> Обработчик изменения звонка </summary>
        private void OnModelCallChanged(object sender, ModelCall modelCall)
        {
            Action action = () =>
            {
                CurrentModelCall = modelCall?.GetDeepCopy();

                if (CurrentModelCall == null || CurrentModelCall.ModelEnumCallStateObj.Code == 6) // Ended (почему то иногда прилетает null, видимо в разных потоках уже закрытый звонок удаляется из списка активных в бизнес логике быстрее чем прилетает данный колбек в этом потоке)
                {
                    OnCloseView();
                }
            };

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Конвертировать ModelCall в CallModelManaged </summary>
        private static CallModelManaged ConvertCallModelCallToCallModelManaged(ModelCall modelCall)
        {
            var result = new CallModelManaged
            {
                Id          = modelCall.Id,
                Duration    = modelCall.Duration,
                Identity    = modelCall.Identity,
                Contact     = DataSourceContact.GetContactModelManagedFromModelContact(modelCall.ModelContactObj),
                Direction   = (CallDirectionManaged)modelCall.ModelEnumCallDirectionObj.Code,
                AddressType = (CallAddressTypeManaged)modelCall.ModelEnumCallAddressTypeObj.Code,
                Encription  = (VoipEncryptionModeManaged)modelCall.ModelEnumVoipEncryptionObj.Code,
                State       = (CallStateManaged)modelCall.ModelEnumCallStateObj.Code
            };

            return(result);
        }
        /// <summary> Конвертировать CallModelManaged в ModelCall </summary>
        private static ModelCall ConvertCallModelManagedToModelCall(CallModelManaged callModelManaged)
        {
            var result = new ModelCall
            {
                Id                          = callModelManaged.Id,
                Duration                    = callModelManaged.Duration,
                Identity                    = callModelManaged.Identity,
                ModelContactObj             = DataSourceContact.GetModelContactFromContactModelManaged(callModelManaged.Contact),
                ModelEnumCallDirectionObj   = ModelEnumCallDirection.GetModelEnum((int)callModelManaged.Direction),
                ModelEnumCallAddressTypeObj = ModelEnumCallAddressType.GetModelEnum((int)callModelManaged.AddressType),
                ModelEnumVoipEncryptionObj  = ModelEnumVoipEncryption.GetModelEnum((int)callModelManaged.Encription),
                ModelEnumCallStateObj       = ModelEnumCallState.GetModelEnum((int)callModelManaged.State)
            };

            return(result);
        }
예제 #5
0
        /// <summary> Конструктор </summary>
        public ViewModelCallActive(ModelCall modelCall)
        {
            CallbackRouter.Instance.ModelCallChanged += OnModelCallChanged;

            if (modelCall != null)
            {
                CurrentModelCall = modelCall;
            }
            else
            {
                OnCloseView();
            }

            CommandAcceptCall = new Command(obj => AcceptCall());
            CommandHangupCall = new Command(obj => HangupCall());

            Mute = DataSourceCall.CheckMuteMicrophone();

            ExistCall = true;
        }
예제 #6
0
        /// <summary> Обработчик изменения звонка </summary>
        private void OnModelCallChanged(object sender, ModelCall modelCall)
        {
            // хз какой брать currentModelCall.ModelEnumCallStateObj.Code потому что СВ в отпуске, а в дебаггере приходит Ringing, наверно его надо брать
            if (modelCall != null && modelCall.ModelEnumCallDirectionObj.Code == 1 /* Incoming */ && modelCall.ModelEnumCallStateObj.Code == 2 /* Ringing */)
            {
                Action action = () => OnEventViewModel("IncomingCall");

                CurrentDispatcher.BeginInvoke(action);
            }

            // Ended (почему то иногда прилетает null, видимо в разных потоках уже закрытый звонок удаляется из списка активных в бизнес логике быстрее чем прилетает данный колбек в этом потоке)
            if (modelCall == null || modelCall.ModelEnumCallStateObj.Code == 6)
            {
                OnEventViewModel("CallEnableChanged", true);
            }
            else
            {
                OnEventViewModel("CallEnableChanged", false);
            }
        }
예제 #7
0
        /// <summary> Конструктор </summary>
        public ViewCallRedirect(ModelCall currentModelCall)
        {
            InitializeComponent();

            _viewModelCallRedirect = new ViewModelCallRedirect(currentModelCall);

            DataContext = _viewModelCallRedirect;

            _viewModelCallRedirect.CommandSelectDialpadList = new Command(obj => ShowComingSoon());
            _viewModelCallRedirect.CommandSelectHistoryList = new Command(obj => ShowComingSoon());

            _viewModelCallRedirect.PropertyChanged += _viewModelCallRedirect_PropertyChanged;

            _currentListModelContact = new ObservableCollection <ExtendedModelContact>(_viewModelCallRedirect.CurrentListModelContact.Select(a => new ExtendedModelContact()
            {
                ModelContactObj = a
            }));

            OnPropertyChanged("CurrentListModelContact");

            _viewModelCallRedirect.CloseView += ViewCallRedirectOnCloseView;
        }
        /// <summary> Возвращает окно WindowStandard с ViewCallRedirect </summary>
        public static WindowStandard GetWindowCallRedirect(ModelCall currentModelCall)
        {
            var windowDispacher = WindowDispacher.GetInstance;

            var result = windowDispacher.GetWindowByUserControl(typeof(ViewCallRedirect)) as WindowStandard;

            if (result != null)
            {
                return(result);
            }

            result = new WindowStandard(new ViewCallRedirect(currentModelCall))
            {
                MinWidth = 400, MinHeight = 630, Height = 630, Width = 400, WindowStartupLocation = WindowStartupLocation.CenterOwner
            };

            result.Activated += (sender, args) => { windowDispacher.SetActiveWindow(result); };

            windowDispacher.AddToListWindow(result);

            result.Closed += (sender, args) => { windowDispacher.DeleteToListWindow(result); };

            return(result);
        }
예제 #9
0
 /// <summary> Инвокатор события ModelCallChanged </summary>
 private void OnModelCallChanged(ModelCall modelCall)
 {
     ModelCallChanged?.Invoke(this, modelCall);
 }
 ///<summary> Открыть вкладку вызовов и выбрать вызов </summary>
 public void OpenCall(ModelCall modelCall)
 {
     GridHistory_Click(null, null);
 }
 /// <summary> Завершить вызов </summary>
 public static bool HangupCall(ModelCall modelCall)
 {
     return(modelCall != null?Logic.HangupCall(modelCall.Id) : false);
 }
 /// <summary> Принять вызов </summary>
 public static bool AcceptCall(ModelCall modelCall)
 {
     return(modelCall != null?Logic.AcceptCall(modelCall.Id, CallOptionsManaged.Default) : false);
 }